119 #include "StFtpcTrackEvaluator.hh"
120 #include "StFtpcConfMapper.hh"
121 #include "StFtpcPoint.hh"
122 #include "StFtpcConfMapPoint.hh"
123 #include "StFtpcTrack.hh"
124 #include "StFormulary.hh"
125 #include "StFtpcDisplay.hh"
127 #include "St_DataSetIter.h"
134 #include "MIntArray.h"
136 #include "StMessMgr.h"
159 mWritePermission = 0;
168 mUncleanTracksArr = 0;
170 mSplitGoodTracksArr = 0;
171 mGoodFastSimHitsArr = 0;
173 mNumFoundVertexTracks = 0;
174 mNumFoundNonVertexTracks = 0;
176 mNumLookLikeGoodTracks = 0;
177 mNumElectronTracks = 0;
178 mNumNonVertexTracks = 0;
185 mNumSplitGoodTracks = 0;
186 mNumSplitLoliGoodTracks = 0;
187 mNumUncleanTracks = 0;
188 mNumUncleanGoodTracks = 0;
190 mNumLongTrackClusters = 0;
192 mNumTooShortTracks = 0;
193 mNumShortTrackClusters = 0;
203 mObjArraysCreated = (Bool_t)kFALSE;
208 mSplitGoodTracks = 0;
209 mSplitLoliGoodTracks = 0;
211 mUncleanGoodTracks = 0;
213 mLongTrackClusters = 0;
215 mShortTrackClusters = 0;
218 mGoodGeantPoints = 0;
219 mGoodFoundPoints = 0;
221 mNumGoodGeantPoints = 0;
222 mNumGoodFoundPoints = 0;
229 mNumWrongHitsAll = 0;
262 mPtEtaMesUnclean = 0;
263 mPtEtaUncleanGood = 0;
264 mPtEtaMesUncleanGood = 0;
268 mPtEtaSplitLoliGood = 0;
278 mPtEtaLookLikeGood = 0;
279 mPtEtaContamination = 0;
280 mPtEtaContaWoSplits = 0;
282 mPtEta10PointTracks = 0;
283 mPtEtaWrongCharge = 0;
284 mPtEtaWrongPosCharge = 0;
286 mGLengthDistTrackAng = 0;
287 mGCircleDistTrackAng = 0;
288 mFLengthDistTrackAng = 0;
289 mFCircleDistTrackAng = 0;
319 mPRatioDistSplit = 0;
323 mNumParentTracks = 0;
340 LOG_INFO <<
"Track evaluating started..." << endm;
342 mVertex = tracker->GetVertex();
344 mFoundHits = tracker->GetClusters();
345 mFoundTracks = tracker->GetTracks();
346 mObjArraysCreated = (Bool_t)kFALSE;
348 SetupFile(filename, write_permission);
350 Setup(geant, ftpc_data);
352 St_ffs_gepoint *ffs_gepoint = (St_ffs_gepoint *)ftpc_data->
Find(
"ffs_fgepoint");
356 LOG_INFO <<
"This event was processed with the slow simulator!" << endm;
357 LOG_INFO <<
"Most information will be missing due to lack of geant hit information." << endm;
366 FillMomentumHistos();
370 FillTimeHistos(tracker);
377 StFtpcTrackEvaluator::~StFtpcTrackEvaluator()
385 delete mUncleanTracksArr;
386 delete mSplitTracksArr;
387 delete mSplitGoodTracksArr;
388 delete mGoodFastSimHitsArr;
396 mGeantHits->Delete();
401 mGeantTracks->Delete();
406 mFastSimHits->Delete();
410 delete mFtpcTrackNum;
413 delete mParentTracks;
414 delete mNumParentTracks;
419 if (mObjArraysCreated) {
420 mFoundHits->Delete();
421 mFoundTracks->Delete();
428 void StFtpcTrackEvaluator::DeleteHistos()
432 delete mNumGeantHits;
433 delete mNumFoundHits;
434 delete mNumGeantTracks;
435 delete mNumFoundTracks;
437 delete mNumFoundVertexTracks;
438 delete mNumFoundNonVertexTracks;
440 delete mNumLookLikeGoodTracks;
441 delete mNumElectronTracks;
442 delete mNumNonVertexTracks;
443 delete mNumGoodGTracks;
444 delete mNumGoodFTracks;
446 delete mContamination;
447 delete mContaWoSplit;
448 delete mNumSplitTracks;
449 delete mNumSplitGoodTracks;
450 delete mNumSplitLoliGoodTracks;
451 delete mNumUncleanTracks;
452 delete mNumUncleanGoodTracks;
453 delete mNumLongTracks;
454 delete mNumLongTrackClusters;
455 delete mNumShortTracks;
456 delete mNumTooShortTracks;
457 delete mNumShortTrackClusters;
459 delete mNumGoodGeantPoints;
460 delete mNumGoodFoundPoints;
461 delete mGoodPointRatio;
463 delete mFHitsOnTrack;
464 delete mGHitsOnTrack;
467 delete mNumWrongHitsAll;
468 delete mNumWrongHits;
499 delete mPtEtaUnclean;
500 delete mPtEtaMesUnclean;
501 delete mPtEtaUncleanGood;
502 delete mPtEtaMesUncleanGood;
505 delete mPtEtaSplitGood;
506 delete mPtEtaSplitLoliGood;
510 delete mPtEtaGoodRatio;
513 delete mPtEtaBadRatio;
516 delete mPtEtaLookLikeGood;
517 delete mPtEtaContamination;
518 delete mPtEtaContaWoSplits;
520 delete mPtEta10PointTracks;
521 delete mPtEtaWrongCharge;
522 delete mPtEtaWrongPosCharge;
524 delete mGLengthDistTrackAng;
525 delete mGCircleDistTrackAng;
526 delete mFLengthDistTrackAng;
527 delete mFCircleDistTrackAng;
529 delete mDcaFMainVertex;
530 delete mDcaFNonVertex;
531 delete mDcaGMainVertex;
532 delete mDcaGNonVertex;
534 delete mGTracklAngAll;
535 delete mGTrackAngAll;
536 delete mGCircleDistAll;
537 delete mGLengthDistAll;
543 delete mGCircleLength;
545 delete mFTracklAngAll;
546 delete mFTrackAngAll;
547 delete mFCircleDistAll;
548 delete mFLengthDistAll;
554 delete mFCircleLength;
557 delete mPRatioDistSplit;
560 delete mTrackingTime;
561 delete mExtensionTime;
570 void StFtpcTrackEvaluator::SetupFile(Char_t *filename, Char_t *write_permission)
574 mFilename =
new Char_t[50];
578 sprintf(mFilename,
"%s", filename);
582 sprintf(mFilename,
"ftpc_evaluator.root");
585 if (write_permission) {
595 mFile =
new TFile(mFilename,
"READ");
597 if (!
mFile->IsOpen()) {
599 LOG_WARN <<
"but that's o.k. - I'll create it immediately!" << endm;
601 mFile =
new TFile(mFilename,
"RECREATE");
611 mFile =
new TFile(mFilename,
"UPDATE");
617 mFile =
new TFile(mFilename,
"UPDATE");
642 mUnclean =
new Bool_t[mFoundTracks->GetEntriesFast()];
644 mFoundVertexTracks = 0;
645 mFoundNonVertexTracks = 0;
647 mLookLikeGoodTracks = 0;
649 mNonVertexTracks = 0;
653 mSplitGoodTracks = 0;
654 mSplitLoliGoodTracks = 0;
656 mUncleanGoodTracks = 0;
658 mLongTrackClusters = 0;
660 mShortTrackClusters = 0;
664 mGoodGeantPoints = 0;
665 mGoodFoundPoints = 0;
672 GeantHitInit((St_g2t_ftp_hit *)geantI(
"g2t_ftp_hit"));
673 GeantTrackInit((St_g2t_track *)geantI(
"g2t_track"), (St_g2t_ftp_hit *)geantI(
"g2t_ftp_hit"));
675 St_ffs_gepoint *ffs_gepoint = (St_ffs_gepoint *)ftpc_data->
Find(
"ffs_fgepoint");
679 FastSimHitInit(ffs_gepoint);
689 void StFtpcTrackEvaluator::SetupHistos()
694 LOG_WARN <<
"Wrong write permission! Has to be RECREATE or UPDATE. Set to RECREATE." << endm;
704 mNumGeantHits = (TH1F *)
mFile->Get(
"num_ghits");
705 mNumFoundHits = (TH1F *)
mFile->Get(
"num_fhits");
706 mNumGeantTracks = (TH1F *)
mFile->Get(
"num_gtracks");
707 mNumFoundTracks = (TH1F *)
mFile->Get(
"num_ftracks");
709 mNumFoundVertexTracks = (TH1F *)
mFile->Get(
"num_fvtx");
710 mNumFoundNonVertexTracks = (TH1F *)
mFile->Get(
"num_fnonvtx");
712 mNumLookLikeGoodTracks = (TH1F *)
mFile->Get(
"num_loligood");
713 mNumElectronTracks = (TH1F *)
mFile->Get(
"num_electron");
714 mNumNonVertexTracks = (TH1F *)
mFile->Get(
"num_nvtx");
715 mNumGoodGTracks = (TH1F *)
mFile->Get(
"num_goodg");
716 mNumGoodFTracks = (TH1F *)
mFile->Get(
"num_goodf");
717 mNumSplitTracks = (TH1F *)
mFile->Get(
"num_split");
718 mNumSplitGoodTracks = (TH1F *)
mFile->Get(
"num_split_good");
719 mNumSplitLoliGoodTracks = (TH1F *)
mFile->Get(
"num_split_loligood");
720 mNumUncleanTracks = (TH1F *)
mFile->Get(
"num_unclean");
721 mNumUncleanGoodTracks = (TH1F *)
mFile->Get(
"num_unclean_good");
722 mNumLongTracks = (TH1F *)
mFile->Get(
"num_long");
723 mNumLongTrackClusters = (TH1F *)
mFile->Get(
"num_longclus");
724 mNumShortTracks = (TH1F *)
mFile->Get(
"num_short");
725 mNumTooShortTracks = (TH1F *)
mFile->Get(
"num_tooshort");
726 mNumShortTrackClusters = (TH1F *)
mFile->Get(
"num_shortclus");
728 mNumGoodGeantPoints = (TH1F *)
mFile->Get(
"good_pointsg");
729 mNumGoodFoundPoints = (TH1F *)
mFile->Get(
"good_pointsf");
730 mGoodPointRatio = (TH1F *)
mFile->Get(
"good_point_ratio");
732 mGHitsOnTrack = (TH1F *)
mFile->Get(
"geant_hits");
733 mFHitsOnTrack = (TH1F *)
mFile->Get(
"found_hits");
735 mNumParents = (TH1F *)
mFile->Get(
"num_parents");
736 mNumWrongHits = (TH2F *)
mFile->Get(
"wrong_hits");
737 mNumWrongHitsAll = (TH1F *)
mFile->Get(
"wrong_hits_all");
739 mGoodRatio = (TH1F *)
mFile->Get(
"good_ratio");
740 mContamination = (TH1F *)
mFile->Get(
"contamination");
741 mContaWoSplit = (TH1F *)
mFile->Get(
"conta_wo_split");
743 mPtot = (TH2F *)
mFile->Get(
"ptot");
744 mPt = (TH2F *)
mFile->Get(
"pt");
745 mPx = (TH2F *)
mFile->Get(
"px");
746 mPy = (TH2F *)
mFile->Get(
"py");
747 mPz = (TH2F *)
mFile->Get(
"pz");
749 mPtotDiff = (TH1F *)
mFile->Get(
"ptot_diff");
750 mPtDiff = (TH1F *)
mFile->Get(
"pt_diff");
751 mPxDiff = (TH1F *)
mFile->Get(
"px_diff");
752 mPyDiff = (TH1F *)
mFile->Get(
"py_diff");
753 mPzDiff = (TH1F *)
mFile->Get(
"pz_diff");
755 mPtotAcc = (TH1F *)
mFile->Get(
"ptot_acc");
756 mPtAcc = (TH1F *)
mFile->Get(
"pt_acc");
757 mPxAcc = (TH1F *)
mFile->Get(
"px_acc");
758 mPyAcc = (TH1F *)
mFile->Get(
"py_acc");
759 mPzAcc = (TH1F *)
mFile->Get(
"pz_acc");
761 mPRelErr = (TH3F *)
mFile->Get(
"p_rel_err");
762 mPRelErrqok = (TH3F *)
mFile->Get(
"p_rel_err_q_ok");
763 mPRelDiff = (TH3F *)
mFile->Get(
"p_rel_diff");
765 mEtaNfhits = (TH2F *)
mFile->Get(
"eta_fhits");
766 mEtaNghits = (TH2F *)
mFile->Get(
"eta_ghits");
768 mPtEtaF = (TH2F *)
mFile->Get(
"pt_etaf");
769 mPtEtaFMes = (TH2F *)
mFile->Get(
"pt_etaf_mes");
770 mPtEtaGood = (TH2F *)
mFile->Get(
"pt_eta_good");
771 mPtEtaBad = (TH2F *)
mFile->Get(
"pt_eta_bad");
772 mPtEtaUnclean = (TH2F *)
mFile->Get(
"pt_eta_unclean");
773 mPtEtaMesUnclean = (TH2F *)
mFile->Get(
"pt_eta_mes_unclean");
774 mPtEtaUncleanGood = (TH2F *)
mFile->Get(
"pt_eta_unclean_good");
775 mPtEtaMesUncleanGood = (TH2F *)
mFile->Get(
"pt_eta_mes_unclean_good");
777 mPtEtaSplit = (TH2F *)
mFile->Get(
"pt_eta_split");
778 mPtEtaSplitGood = (TH2F *)
mFile->Get(
"pt_eta_split_good");
779 mPtEtaSplitLoliGood = (TH2F *)
mFile->Get(
"pt_eta_split_loligood");
781 mPtEtaGoodG = (TH2F *)
mFile->Get(
"pt_eta_goodg");
782 mPtEtaGoodF = (TH2F *)
mFile->Get(
"pt_eta_goodf");
783 mPtEtaGoodRatio = (TH2F *)
mFile->Get(
"pt_eta_good_ratio");
784 mPtEtaBadG = (TH2F *)
mFile->Get(
"pt_eta_badg");
785 mPtEtaBadF = (TH2F *)
mFile->Get(
"pt_eta_badf");
786 mPtEtaBadRatio = (TH2F *)
mFile->Get(
"pt_eta_bad_ratio");
788 mPtEtaFVtx = (TH2F *)
mFile->Get(
"pt_eta_vtxf");
789 mPtEtaLookLikeGood = (TH2F *)
mFile->Get(
"pt_eta_loligood");
790 mPtEtaContamination = (TH2F *)
mFile->Get(
"pt_eta_contam");
791 mPtEtaContaWoSplits = (TH2F *)
mFile->Get(
"pt_eta_contam_wo_splits");
793 mPtEta10PointTracks = (TH2F *)
mFile->Get(
"pt_eta_10point_tracks");
794 mPtEtaWrongCharge = (TH2F *)
mFile->Get(
"pt_eta_wrong_charge");
795 mPtEtaWrongPosCharge = (TH2F *)
mFile->Get(
"pt_eta_wrong_positive_charge");
797 mDcaFMainVertex = (TH1F *)
mFile->Get(
"dca_mainf");
798 mDcaFNonVertex = (TH1F *)
mFile->Get(
"dca_nonf");
799 mDcaGMainVertex = (TH1F *)
mFile->Get(
"dca_maing");
800 mDcaGNonVertex = (TH1F *)
mFile->Get(
"dca_nong");
802 mGLengthDistTrackAng = (TH2F *)
mFile->Get(
"glength_ang");
803 mGCircleDistTrackAng = (TH2F *)
mFile->Get(
"gcircle_ang");
804 mFLengthDistTrackAng = (TH2F *)
mFile->Get(
"flength_ang");
805 mFCircleDistTrackAng = (TH2F *)
mFile->Get(
"fcircle_ang");
807 mGTracklAngAll = (TH1F *)
mFile->Get(
"gtrackl_angle_all");
808 mGTrackAngAll = (TH1F *)
mFile->Get(
"gtrack_angle_all");
809 mGCircleDistAll = (TH1F *)
mFile->Get(
"gcircle_dist_all");
810 mGLengthDistAll = (TH1F *)
mFile->Get(
"glength_dist_all");
812 mGTrackAng = (TH2F *)
mFile->Get(
"gtrack_angle");
813 mGCircleDist = (TH2F *)
mFile->Get(
"gcircle_dist");
814 mGLengthDist = (TH2F *)
mFile->Get(
"glength_dist");
816 mGCircleLength = (TH2F *)
mFile->Get(
"gcircle_length");
818 mFTracklAngAll = (TH1F *)
mFile->Get(
"ftrackl_angle_all");
819 mFTrackAngAll = (TH1F *)
mFile->Get(
"ftrack_angle_all");
820 mFCircleDistAll = (TH1F *)
mFile->Get(
"fcircle_dist_all");
821 mFLengthDistAll = (TH1F *)
mFile->Get(
"flength_dist_all");
823 mFTrackAng = (TH2F *)
mFile->Get(
"ftrack_angle");
824 mFCircleDist = (TH2F *)
mFile->Get(
"fcircle_dist");
825 mFLengthDist = (TH2F *)
mFile->Get(
"flength_dist");
827 mFCircleLength = (TH2F *)
mFile->Get(
"fcircle_length");
829 mPRatioDist = (TH2F *)
mFile->Get(
"pratio_dist");
830 mPRatioDistSplit = (TH2F *)
mFile->Get(
"pratio_dist_split");
832 mSetupTime = (TH1F*)
mFile->Get(
"setup_time");
833 mTrackingTime = (TH1F*)
mFile->Get(
"tracking_time");
834 mExtensionTime = (TH1F*)
mFile->Get(
"extension_time");
835 mSplitTime = (TH1F*)
mFile->Get(
"split_time");
836 mFitTime = (TH1F*)
mFile->Get(
"fit_time");
837 mTotalTime = (TH1F*)
mFile->Get(
"total_time");
844 void StFtpcTrackEvaluator::CreateHistos()
848 mNumGeantHits =
new TH1F(
"num_ghits",
"Simulated clusters", 100, 0., 40000.);
849 mNumFoundHits =
new TH1F(
"num_fhits",
"Found clusters", 100, 0., 40000.);
850 mNumGeantTracks =
new TH1F(
"num_gtracks",
"Simulated tracks", 100, 0., 5000.);
851 mNumFoundTracks =
new TH1F(
"num_ftracks",
"Found tracks", 100, 0., 2500.);
853 mNumFoundVertexTracks =
new TH1F(
"num_fvtx",
"Found main vertex tracks", 100, 0., 2500.);
854 mNumFoundNonVertexTracks =
new TH1F(
"num_fnonvtx",
"Found non main vertex tracks", 100, 0., 2500.);
856 mNumLookLikeGoodTracks =
new TH1F(
"num_loligood",
"Tracks which look like good tracks", 100, 0., 500.);
857 mNumElectronTracks =
new TH1F(
"num_electron",
"Electrons", 100, 0., 500.);
858 mNumNonVertexTracks =
new TH1F(
"num_nvtx",
"Non main vertex tracks", 100, 0., 1000.);
859 mNumGoodGTracks =
new TH1F(
"num_goodg",
"Good geant tracks", 100, 0., 1000.);
860 mNumGoodFTracks =
new TH1F(
"num_goodf",
"Good found tracks", 100, 0., 1000.);
861 mGoodRatio =
new TH1F(
"good_ratio",
"Ratio of good found tracks to good geant tracks", 100, 0., 2.);
862 mContamination =
new TH1F(
"contamination",
"Ratio of loli good tracks to good main vertex tracks", 100, 0., 2.);
863 mContaWoSplit =
new TH1F(
"conta_wo_split",
"Ratio of loli good minus split tracks to good main vertex tracks", 100, 0., 2.);
864 mNumSplitTracks =
new TH1F(
"num_split",
"Split tracks", 100, 0., 300.);
865 mNumSplitGoodTracks =
new TH1F(
"num_split_good",
"Split good tracks", 100, 0., 300.);
866 mNumSplitLoliGoodTracks =
new TH1F(
"num_split_loligood",
"Split look-like good tracks", 100, 0., 300.);
867 mNumUncleanTracks =
new TH1F(
"num_unclean",
"Unclean tracks", 100, 0., 300.);
868 mNumUncleanGoodTracks =
new TH1F(
"num_unclean_good",
"Unclean good tracks", 100, 0., 300.);
869 mNumLongTracks =
new TH1F(
"num_long",
"Simulated tracks with more than 10 clusters", 100, 0., 300.);
870 mNumShortTracks =
new TH1F(
"num_short",
"Simulated tracks with less than 5 clusters", 100, 0., 5000.);
871 mNumTooShortTracks =
new TH1F(
"num_tooshort",
"Tracks which should be longer", 100, 0., 1000.);
873 mNumShortTrackClusters =
new TH1F(
"num_shortclus",
"Clusters on tracks with less than 5 clusters", 100, 0., 12000.);
874 mNumLongTrackClusters =
new TH1F(
"num_longclus",
"Clusters on tracks with more than 10 clusters", 100, 0., 1600.);
876 mNumGoodGeantPoints =
new TH1F(
"good_pointsg",
"Number of points on good geant tracks", 100, 0., 40000.);
877 mNumGoodFoundPoints =
new TH1F(
"good_pointsf",
"Number of points on good found tracks", 100, 0., 40000.);
878 mGoodPointRatio =
new TH1F(
"good_point_ratio",
"Ratio of good points", 100, 0., 1.);
880 mFHitsOnTrack =
new TH1F(
"found_hits",
"Found clusters", StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), 0.5, StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + 0.5);
881 mGHitsOnTrack =
new TH1F(
"geant_hits",
"Geant clusters", 50, 0.5, 50.5);
883 mNumParents =
new TH1F(
"num_parents",
"Parent tracks", StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), 0.5, StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + 0.5);
884 mNumWrongHits =
new TH2F(
"wrong_hits",
"Wrong clusters on tracks", StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), -0.5, 9.5, StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), 0.5, StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + 0.5);
885 mNumWrongHitsAll =
new TH1F(
"wrong_hits_all",
"Wrong clusters on tracks", StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), -0.5, 9.5);
887 mPtot =
new TH2F(
"ptot",
"Total momentum", 60, 0., 30., 60, 0., 30.);
888 mPt =
new TH2F(
"pt",
"Transverse momentum", 50, 0., 2.5, 50, 0., 2.5);
889 mPx =
new TH2F(
"px",
"Momentum in x direction", 60, -1.5, 1.5, 60, -1.5, 1.5);
890 mPy =
new TH2F(
"py",
"Momentum in y direction", 60, -1.5, 1.5, 60, -1.5, 1.5);
891 mPz =
new TH2F(
"pz",
"Momentum in z direction", 100, -25., 25., 100, -25., 25.);
893 mPtotDiff =
new TH1F(
"ptot_diff",
"Rel. difference in p_tot", 200, -1., 1.);
894 mPtDiff =
new TH1F(
"pt_diff",
"Rel. difference in p_t", 200, -1., 1.);
895 mPxDiff =
new TH1F(
"px_diff",
"Rel. difference in p_x", 200, -1., 1.);
896 mPyDiff =
new TH1F(
"py_diff",
"Rel. difference in p_y", 200, -1., 1.);
897 mPzDiff =
new TH1F(
"pz_diff",
"Rel. difference in p_z", 200, -1., 1.);
899 mPtotAcc =
new TH1F(
"ptot_acc",
"Rel. accuracy in p_tot", 200, 0., 5.);
900 mPtAcc =
new TH1F(
"pt_acc",
"Rel. accuracy in p_t", 200, 0., 5.);
901 mPxAcc =
new TH1F(
"px_acc",
"Rel. accuracy in p_x", 200, 0., 5.);
902 mPyAcc =
new TH1F(
"py_acc",
"Rel. accuracy in p_y", 200, 0., 5.);
903 mPzAcc =
new TH1F(
"pz_acc",
"Rel. accuracy in p_z", 200, 0., 5.);
905 mPRelErr =
new TH3F(
"p_rel_err",
"Rel. error of p_tot", 48, 2., 4.4, 25, 0., 5., 50, -1., 1.);
906 mPRelErrqok =
new TH3F(
"p_rel_err_q_ok",
"Rel. error of p_tot (charge ok)", 48, 2., 4.4, 25, 0., 5., 50, -1., 1.);
907 mPRelDiff =
new TH3F(
"p_rel_diff",
"Rel. differnce of p_tot", 48, 2., 4.4, 25, 0., 5., 50, -1., 1.);
909 mEtaNghits =
new TH2F(
"eta_ghits",
"Geant tracks", StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), 0.5, StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + 0.5, 96, 2.0, 4.4);
910 mEtaNfhits =
new TH2F(
"eta_fhits",
"Found tracks", StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), 0.5, StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + 0.5, 96, 2.0, 4.4);
912 mPtEtaF =
new TH2F(
"pt_etaf",
"Found tracks", 96, 2.0, 4.4, 50, 0., 5.);
913 mPtEtaFMes =
new TH2F(
"pt_etaf_mes",
"Found tracks", 96, 2.0, 4.4, 50, 0., 5.);
914 mPtEtaGood =
new TH2F(
"pt_eta_good",
"Ratio of good tracks", 96, 2.0, 4.4, 50, 0., 5.);
915 mPtEtaBad =
new TH2F(
"pt_eta_bad",
"Ratio of bad tracks", 96, 2.0, 4.4, 50, 0., 5.);
916 mPtEtaUnclean =
new TH2F(
"pt_eta_unclean",
"Unclean tracks", 96, 2.0, 4.4, 50, 0., 5.);
917 mPtEtaMesUnclean =
new TH2F(
"pt_eta_mes_unclean",
"Unclean tracks", 96, 2.0, 4.4, 50, 0., 5.);
918 mPtEtaUncleanGood =
new TH2F(
"pt_eta_unclean_good",
"Unclean good tracks", 96, 2.0, 4.4, 50, 0., 5.);
919 mPtEtaMesUncleanGood =
new TH2F(
"pt_eta_mes_unclean_good",
"Unclean good tracks", 96, 2.0, 4.4, 50, 0., 5.);
921 mPtEtaSplit =
new TH2F(
"pt_eta_split",
"Split tracks", 96, 2.0, 4.4, 50, 0., 5.);
922 mPtEtaSplitGood =
new TH2F(
"pt_eta_split_good",
"Split good tracks", 96, 2.0, 4.4, 50, 0., 5.);
923 mPtEtaSplitLoliGood =
new TH2F(
"pt_eta_split_loligood",
"Split look-like good tracks", 96, 2.0, 4.4, 50, 0., 5.);
925 mPtEtaGoodG =
new TH2F(
"pt_eta_goodg",
"Good geant tracks", 96, 2.0, 4.4, 50, 0., 5.);
926 mPtEtaGoodF =
new TH2F(
"pt_eta_goodf",
"Good found tracks", 96, 2.0, 4.4, 50, 0., 5.);
927 mPtEtaGoodRatio =
new TH2F(
"pt_eta_good_ratio",
"Ratio of good found tracks", 96, 2.0, 4.4, 50, 0., 5.);
928 mPtEtaBadG =
new TH2F(
"pt_eta_badg",
"Bad geant tracks", 96, 2.0, 4.4, 50, 0., 5.);
929 mPtEtaBadF =
new TH2F(
"pt_eta_badf",
"Bad found tracks", 96, 2.0, 4.4, 50, 0., 5.);
930 mPtEtaBadRatio =
new TH2F(
"pt_eta_bad_ratio",
"Ratio of bad found tracks", 96, 2.0, 4.4, 50, 0., 5.);
932 mPtEtaFVtx =
new TH2F(
"pt_eta_vtxf",
"Found tracks with main vertex tag", 96, 2.0, 4.4, 50, 0., 5.);
933 mPtEtaLookLikeGood =
new TH2F(
"pt_eta_loligood",
"Found tracks looking good but are not", 96, 2.0, 4.4, 50, 0., 5.);
934 mPtEtaContamination =
new TH2F(
"pt_eta_contam",
"Contamination", 96, 2.0, 4.4, 50, 0., 5.);
935 mPtEtaContaWoSplits =
new TH2F(
"pt_eta_contam_wo_splits",
"Contamination without splits", 96, 2.0, 4.4, 50, 0., 5.);
937 mPtEta10PointTracks =
new TH2F(
"pt_eta_10point_tracks",
"tracks with 10 points", 96, 2.0, 4.4, 50, 0., 5.);
938 mPtEtaWrongCharge =
new TH2F(
"pt_eta_wrong_charge",
"tracks with wrong charge", 96, 2.0, 4.4, 50, 0., 5.);
939 mPtEtaWrongPosCharge =
new TH2F(
"pt_eta_wrong_positive_charge",
"tracks with wrong positiv charge", 96, 2.0, 4.4, 50, 0., 5.);
941 mDcaFMainVertex =
new TH1F(
"dca_mainf",
"Found main vertex tracks", 100, 0., 10.);
942 mDcaFNonVertex =
new TH1F(
"dca_nonf",
"Found non vertex tracks", 100, 0., 10.);
943 mDcaGMainVertex =
new TH1F(
"dca_maing",
"Geant main vertex tracks", 100, 0., 10.);
944 mDcaGNonVertex =
new TH1F(
"dca_nong",
"Geant non vertex tracks", 100, 0., 10.);
946 mGLengthDistTrackAng =
new TH2F(
"glength_ang",
"Geant tracks", 100, 0., 0.1, 100, 0., 50.);
947 mGCircleDistTrackAng =
new TH2F(
"gcircle_ang",
"Geant tracks", 100, 0., 0.1, 100, 0., 0.01);
948 mFLengthDistTrackAng =
new TH2F(
"flength_ang",
"Found tracks", 100, 0., 0.1, 100, 0., 50.);
949 mFCircleDistTrackAng =
new TH2F(
"fcircle_ang",
"Found tracks", 100, 0., 0.1, 100, 0., 0.01);
951 mGTracklAngAll =
new TH1F(
"gtrackl_angle_all",
"Geant tracks", 100, 0., 0.1);
952 mGTrackAngAll =
new TH1F(
"gtrack_angle_all",
"Geant tracks", 100, 0., 0.5);
953 mGCircleDistAll =
new TH1F(
"gcircle_dist_all",
"Geant tracks", 100, 0., 0.015);
954 mGLengthDistAll =
new TH1F(
"glength_dist_all",
"Geant tracks", 100, 0., 200);
956 mGTrackAng =
new TH2F(
"gtrack_angle",
"Geant tracks", 100, 0., 0.5, 8, 2.5, 10.5);
957 mGCircleDist =
new TH2F(
"gcircle_dist",
"Geant tracks", 100, 0., 0.015, 7, 3.5, 10.5);
958 mGLengthDist =
new TH2F(
"glength_dist",
"Geant tracks", 100, 0., 200, 7, 3.5, 10.5);
960 mGCircleLength =
new TH2F(
"gcircle_length",
"Geant tracks", 100, 0., 40., 100, 0., 0.015);
962 mFTracklAngAll =
new TH1F(
"ftrackl_angle_all",
"Found tracks", 100, 0., 0.1);
963 mFTrackAngAll =
new TH1F(
"ftrack_angle_all",
"Found tracks", 100, 0., 0.5);
964 mFCircleDistAll =
new TH1F(
"fcircle_dist_all",
"Found tracks", 100, 0., 0.015);
965 mFLengthDistAll =
new TH1F(
"flength_dist_all",
"Found tracks", 100, 0., 200);
967 mFTrackAng =
new TH2F(
"ftrack_angle",
"Found tracks", 100, 0., 0.5, 8, 2.5, 10.5);
968 mFCircleDist =
new TH2F(
"fcircle_dist",
"Found tracks", 100, 0., 0.015, 7, 3.5, 10.5);
969 mFLengthDist =
new TH2F(
"flength_dist",
"Found tracks", 100, 0., 200, 7, 3.5, 10.5);
971 mFCircleLength =
new TH2F(
"fcircle_length",
"Found tracks", 100, 0., 40., 100, 0., 0.015);
973 mPRatioDist =
new TH2F(
"pratio_dist",
"Found track pairs", 100, 0., 2., 37, 0.25, 1.0);
974 mPRatioDistSplit =
new TH2F(
"pratio_dist_split",
"Split track pairs", 100, 0., 2., 37, 0.25, 1.0);
976 mSetupTime =
new TH1F(
"setup_time",
"Setup time", 1000, 0., 2.);
977 mTrackingTime =
new TH1F(
"tracking_time",
"Tracking time", 1000, 0., 2.);
978 mExtensionTime =
new TH1F(
"extension_time",
"Extension time", 1000, 0., 2.);
979 mSplitTime =
new TH1F(
"split_time",
"Splits time", 1000, 0., 2.);
980 mFitTime =
new TH1F(
"fit_time",
"Fit time", 1000, 0., 2.);
981 mTotalTime =
new TH1F(
"total_time",
"Total time", 1000, 0., 2.);
983 ((TAxis *)mNumGeantHits->GetXaxis())->SetTitle(
"'F# of clusters");
984 ((TAxis *)mNumGeantHits->GetYaxis())->SetTitle(
"'F# of events");
985 ((TAxis *)mNumFoundHits->GetXaxis())->SetTitle(
"'F# of clusters");
986 ((TAxis *)mNumFoundHits->GetYaxis())->SetTitle(
"'F# of events");
987 ((TAxis *)mNumGeantTracks->GetXaxis())->SetTitle(
"'F# of tracks");
988 ((TAxis *)mNumGeantTracks->GetYaxis())->SetTitle(
"'F# of events");
989 ((TAxis *)mNumFoundTracks->GetXaxis())->SetTitle(
"'F# of tracks");
990 ((TAxis *)mNumFoundTracks->GetYaxis())->SetTitle(
"'F# of events");
992 ((TAxis *)mNumFoundVertexTracks->GetXaxis())->SetTitle(
"'F# of tracks");
993 ((TAxis *)mNumFoundVertexTracks->GetYaxis())->SetTitle(
"'F# of events");
994 ((TAxis *)mNumFoundNonVertexTracks->GetXaxis())->SetTitle(
"'F# of tracks");
995 ((TAxis *)mNumFoundNonVertexTracks->GetYaxis())->SetTitle(
"'F# of events");
997 ((TAxis *)mNumLookLikeGoodTracks->GetXaxis())->SetTitle(
"'F# of tracks");
998 ((TAxis *)mNumLookLikeGoodTracks->GetYaxis())->SetTitle(
"'F# of events");
1000 ((TAxis *)mNumElectronTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1001 ((TAxis *)mNumElectronTracks->GetYaxis())->SetTitle(
"'F# of events");
1002 ((TAxis *)mNumNonVertexTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1003 ((TAxis *)mNumNonVertexTracks->GetYaxis())->SetTitle(
"'F# of events");
1004 ((TAxis *)mNumGoodGTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1005 ((TAxis *)mNumGoodGTracks->GetYaxis())->SetTitle(
"'F# of events");
1006 ((TAxis *)mNumGoodFTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1007 ((TAxis *)mNumGoodFTracks->GetYaxis())->SetTitle(
"'F# of events");
1008 ((TAxis *)mGoodRatio->GetXaxis())->SetTitle(
"ratio");
1009 ((TAxis *)mGoodRatio->GetYaxis())->SetTitle(
"'F# of events");
1010 ((TAxis *)mContamination->GetXaxis())->SetTitle(
"ratio");
1011 ((TAxis *)mContamination->GetYaxis())->SetTitle(
"'F# of events");
1012 ((TAxis *)mContaWoSplit->GetXaxis())->SetTitle(
"ratio");
1013 ((TAxis *)mContaWoSplit->GetYaxis())->SetTitle(
"'F# of events");
1015 ((TAxis *)mNumSplitTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1016 ((TAxis *)mNumSplitTracks->GetYaxis())->SetTitle(
"'F# of events");
1017 ((TAxis *)mNumSplitGoodTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1018 ((TAxis *)mNumSplitGoodTracks->GetYaxis())->SetTitle(
"'F# of events");
1019 ((TAxis *)mNumSplitLoliGoodTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1020 ((TAxis *)mNumSplitLoliGoodTracks->GetYaxis())->SetTitle(
"'F# of events");
1021 ((TAxis *)mNumUncleanTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1022 ((TAxis *)mNumUncleanTracks->GetYaxis())->SetTitle(
"'F# of events");
1023 ((TAxis *)mNumUncleanGoodTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1024 ((TAxis *)mNumUncleanGoodTracks->GetYaxis())->SetTitle(
"'F# of events");
1025 ((TAxis *)mNumLongTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1026 ((TAxis *)mNumLongTracks->GetYaxis())->SetTitle(
"'F# of events");
1027 ((TAxis *)mNumLongTrackClusters->GetXaxis())->SetTitle(
"'F# of clusters");
1028 ((TAxis *)mNumLongTrackClusters->GetYaxis())->SetTitle(
"'F# of events");
1029 ((TAxis *)mNumShortTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1030 ((TAxis *)mNumShortTracks->GetYaxis())->SetTitle(
"'F# of events");
1031 ((TAxis *)mNumTooShortTracks->GetXaxis())->SetTitle(
"'F# of tracks");
1032 ((TAxis *)mNumTooShortTracks->GetYaxis())->SetTitle(
"'F# of events");
1033 ((TAxis *)mNumShortTrackClusters->GetXaxis())->SetTitle(
"'F# of clusters");
1034 ((TAxis *)mNumShortTrackClusters->GetYaxis())->SetTitle(
"'F# of events");
1036 ((TAxis *)mFHitsOnTrack->GetXaxis())->SetTitle(
"'F# of clusters on track");
1037 ((TAxis *)mFHitsOnTrack->GetYaxis())->SetTitle(
"'F# of found tracks");
1038 ((TAxis *)mGHitsOnTrack->GetXaxis())->SetTitle(
"'F# of clusters on track");
1039 ((TAxis *)mGHitsOnTrack->GetYaxis())->SetTitle(
"'F# of found tracks");
1041 ((TAxis *)mNumGoodGeantPoints->GetXaxis())->SetTitle(
"'F# of clusters");
1042 ((TAxis *)mNumGoodGeantPoints->GetYaxis())->SetTitle(
"'F# of events");
1043 ((TAxis *)mNumGoodFoundPoints->GetXaxis())->SetTitle(
"'F# of clusters");
1044 ((TAxis *)mNumGoodFoundPoints->GetYaxis())->SetTitle(
"'F# of events");
1045 ((TAxis *)mGoodPointRatio->GetXaxis())->SetTitle(
"Ratio");
1046 ((TAxis *)mGoodPointRatio->GetYaxis())->SetTitle(
"'F# of events");
1048 ((TAxis *)mNumParents->GetXaxis())->SetTitle(
"'F# of parent tracks");
1049 ((TAxis *)mNumParents->GetYaxis())->SetTitle(
"'F# of found tracks");
1050 ((TAxis *)mNumWrongHits->GetXaxis())->SetTitle(
"'F# of wrong clusters on track");
1051 ((TAxis *)mNumWrongHits->GetXaxis())->SetTitle(
"'F# of found clusters on track");
1052 ((TAxis *)mNumWrongHits->GetZaxis())->SetTitle(
"'F# of found tracks");
1053 ((TAxis *)mNumWrongHitsAll->GetXaxis())->SetTitle(
"'F# of wrong clusters on track");
1054 ((TAxis *)mNumWrongHitsAll->GetYaxis())->SetTitle(
"'F# of found tracks");
1056 ((TAxis *)mPtot->GetXaxis())->SetTitle(
"momentum of geant track");
1057 ((TAxis *)mPtot->GetYaxis())->SetTitle(
"momentum of found track");
1058 ((TAxis *)mPtot->GetZaxis())->SetTitle(
"'F# of found tracks");
1059 ((TAxis *)mPt->GetXaxis())->SetTitle(
"momentum of geant track");
1060 ((TAxis *)mPt->GetYaxis())->SetTitle(
"momentum of found track");
1061 ((TAxis *)mPt->GetZaxis())->SetTitle(
"'F# of found tracks");
1062 ((TAxis *)mPx->GetXaxis())->SetTitle(
"momentum of geant track");
1063 ((TAxis *)mPx->GetYaxis())->SetTitle(
"momentum of found track");
1064 ((TAxis *)mPx->GetZaxis())->SetTitle(
"'F# of found tracks");
1065 ((TAxis *)mPy->GetXaxis())->SetTitle(
"momentum of geant track");
1066 ((TAxis *)mPy->GetYaxis())->SetTitle(
"momentum of found track");
1067 ((TAxis *)mPy->GetZaxis())->SetTitle(
"'F# of found tracks");
1068 ((TAxis *)mPz->GetXaxis())->SetTitle(
"momentum of geant track");
1069 ((TAxis *)mPz->GetYaxis())->SetTitle(
"momentum of found track");
1070 ((TAxis *)mPz->GetZaxis())->SetTitle(
"'F# of found tracks");
1072 ((TAxis *)mPtotDiff->GetXaxis())->SetTitle(
"rel. difference");
1073 ((TAxis *)mPtotDiff->GetYaxis())->SetTitle(
"'F# of found tracks");
1074 ((TAxis *)mPtDiff->GetXaxis())->SetTitle(
"rel. difference");
1075 ((TAxis *)mPtDiff->GetYaxis())->SetTitle(
"'F# of found tracks");
1076 ((TAxis *)mPxDiff->GetXaxis())->SetTitle(
"rel. difference");
1077 ((TAxis *)mPxDiff->GetYaxis())->SetTitle(
"'F# of found tracks");
1078 ((TAxis *)mPyDiff->GetXaxis())->SetTitle(
"rel. difference");
1079 ((TAxis *)mPyDiff->GetYaxis())->SetTitle(
"'F# of found tracks");
1080 ((TAxis *)mPzDiff->GetXaxis())->SetTitle(
"rel. difference");
1081 ((TAxis *)mPzDiff->GetYaxis())->SetTitle(
"'F# of found tracks");
1083 ((TAxis *)mPtotAcc->GetXaxis())->SetTitle(
"rel. accuracy");
1084 ((TAxis *)mPtotAcc->GetYaxis())->SetTitle(
"'F# of found tracks");
1085 ((TAxis *)mPtAcc->GetXaxis())->SetTitle(
"rel. accuracy");
1086 ((TAxis *)mPtAcc->GetYaxis())->SetTitle(
"'F# of found tracks");
1087 ((TAxis *)mPxAcc->GetXaxis())->SetTitle(
"rel. accuracy");
1088 ((TAxis *)mPxAcc->GetYaxis())->SetTitle(
"'F# of found tracks");
1089 ((TAxis *)mPyAcc->GetXaxis())->SetTitle(
"rel. accuracy");
1090 ((TAxis *)mPyAcc->GetYaxis())->SetTitle(
"'F# of found tracks");
1091 ((TAxis *)mPzAcc->GetXaxis())->SetTitle(
"rel. accuracy");
1092 ((TAxis *)mPzAcc->GetYaxis())->SetTitle(
"'F# of found tracks");
1094 ((TAxis *)mDcaFMainVertex->GetXaxis())->SetTitle(
"dca [cm]");
1095 ((TAxis *)mDcaFMainVertex->GetYaxis())->SetTitle(
"'F# of tracks");
1096 ((TAxis *)mDcaFNonVertex->GetXaxis())->SetTitle(
"dca [cm]");
1097 ((TAxis *)mDcaFNonVertex->GetYaxis())->SetTitle(
"'F# of tracks");
1098 ((TAxis *)mDcaGMainVertex->GetXaxis())->SetTitle(
"dca [cm]");
1099 ((TAxis *)mDcaGMainVertex->GetYaxis())->SetTitle(
"'F# of tracks");
1100 ((TAxis *)mDcaGNonVertex->GetXaxis())->SetTitle(
"dca [cm]");
1101 ((TAxis *)mDcaGNonVertex->GetYaxis())->SetTitle(
"'F# of tracks");
1103 ((TAxis *)mGTracklAngAll->GetXaxis())->SetTitle(
"angle of tracklet");
1104 ((TAxis *)mGTracklAngAll->GetYaxis())->SetTitle(
"'F# of tracklets");
1105 ((TAxis *)mGTrackAngAll->GetXaxis())->SetTitle(
"angle of track endings");
1106 ((TAxis *)mGTrackAngAll->GetYaxis())->SetTitle(
"'F# of track endings");
1107 ((TAxis *)mGCircleDistAll->GetXaxis())->SetTitle(
"circle distance to track");
1108 ((TAxis *)mGCircleDistAll->GetYaxis())->SetTitle(
"'F# of track endings");
1109 ((TAxis *)mGLengthDistAll->GetXaxis())->SetTitle(
"length distance to track");
1110 ((TAxis *)mGLengthDistAll->GetYaxis())->SetTitle(
"'F# of track endings");
1112 ((TAxis *)mGTrackAng->GetXaxis())->SetTitle(
"angle of track endings");
1113 ((TAxis *)mGTrackAng->GetYaxis())->SetTitle(
"'F# of last point");
1114 ((TAxis *)mGTrackAng->GetZaxis())->SetTitle(
"'F# of track endings");
1115 ((TAxis *)mGCircleDist->GetXaxis())->SetTitle(
"circle distance to track");
1116 ((TAxis *)mGCircleDist->GetYaxis())->SetTitle(
"'F# of last point");
1117 ((TAxis *)mGCircleDist->GetZaxis())->SetTitle(
"'F# of track endings");
1118 ((TAxis *)mGLengthDist->GetXaxis())->SetTitle(
"length distance to track");
1119 ((TAxis *)mGLengthDist->GetYaxis())->SetTitle(
"'F# of last point");
1120 ((TAxis *)mGLengthDist->GetZaxis())->SetTitle(
"'F# of track endings");
1122 ((TAxis *)mGCircleLength->GetXaxis())->SetTitle(
"length distance");
1123 ((TAxis *)mGCircleLength->GetYaxis())->SetTitle(
"circle distance");
1124 ((TAxis *)mGCircleLength->GetZaxis())->SetTitle(
"'F# of track endings");
1126 ((TAxis *)mFTracklAngAll->GetXaxis())->SetTitle(
"angle of tracklet");
1127 ((TAxis *)mFTracklAngAll->GetYaxis())->SetTitle(
"'F# of tracklets");
1128 ((TAxis *)mFTrackAngAll->GetXaxis())->SetTitle(
"angle of track endings");
1129 ((TAxis *)mFTrackAngAll->GetYaxis())->SetTitle(
"'F# of track endings");
1130 ((TAxis *)mFCircleDistAll->GetXaxis())->SetTitle(
"circle distance to track");
1131 ((TAxis *)mFCircleDistAll->GetYaxis())->SetTitle(
"'F# of track endings");
1132 ((TAxis *)mFLengthDistAll->GetXaxis())->SetTitle(
"length distance to track");
1133 ((TAxis *)mFLengthDistAll->GetYaxis())->SetTitle(
"'F# of track endings");
1135 ((TAxis *)mFTrackAng->GetXaxis())->SetTitle(
"angle of track endings");
1136 ((TAxis *)mFTrackAng->GetYaxis())->SetTitle(
"'F# of last point");
1137 ((TAxis *)mFTrackAng->GetZaxis())->SetTitle(
"'F# of track endings");
1138 ((TAxis *)mFCircleDist->GetXaxis())->SetTitle(
"circle distance to track");
1139 ((TAxis *)mFCircleDist->GetYaxis())->SetTitle(
"'F# of last point");
1140 ((TAxis *)mFCircleDist->GetZaxis())->SetTitle(
"'F# of track endings");
1141 ((TAxis *)mFLengthDist->GetXaxis())->SetTitle(
"length distance to track");
1142 ((TAxis *)mFLengthDist->GetYaxis())->SetTitle(
"'F# of last point");
1143 ((TAxis *)mFLengthDist->GetZaxis())->SetTitle(
"'F# of track endings");
1145 ((TAxis *)mFCircleLength->GetXaxis())->SetTitle(
"length distance");
1146 ((TAxis *)mFCircleLength->GetYaxis())->SetTitle(
"circle distance");
1147 ((TAxis *)mFCircleLength->GetZaxis())->SetTitle(
"'F# of track endings");
1149 ((TAxis *)mPRatioDist->GetXaxis())->SetTitle(
"distance [cm]");
1150 ((TAxis *)mPRatioDist->GetYaxis())->SetTitle(
"(p1 + p2) / (p1max + p2max)");
1151 ((TAxis *)mPRatioDist->GetZaxis())->SetTitle(
"'F# of pairs");
1152 ((TAxis *)mPRatioDistSplit->GetXaxis())->SetTitle(
"distance [GeV]");
1153 ((TAxis *)mPRatioDistSplit->GetYaxis())->SetTitle(
"(p1 + p2) / (p1max + p2max)");
1154 ((TAxis *)mPRatioDistSplit->GetZaxis())->SetTitle(
"'F# of pairs");
1156 ((TAxis *)mEtaNghits->GetXaxis())->SetTitle(
"'F# of geant clusters");
1157 ((TAxis *)mEtaNghits->GetYaxis())->SetTitle(
"`h#");
1158 ((TAxis *)mEtaNfhits->GetXaxis())->SetTitle(
"'F# of found clusters");
1159 ((TAxis *)mEtaNfhits->GetYaxis())->SetTitle(
"`h#");
1161 ((TAxis *)mPtEtaF->GetXaxis())->SetTitle(
"`h# (of parent)");
1162 ((TAxis *)mPtEtaF->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1163 ((TAxis *)mPtEtaF->GetZaxis())->SetTitle(
"'F# of tracks");
1165 ((TAxis *)mPtEtaFMes->GetXaxis())->SetTitle(
"`h# (measured)");
1166 ((TAxis *)mPtEtaFMes->GetYaxis())->SetTitle(
"p?'c#! [GeV] (measured)");
1167 ((TAxis *)mPtEtaFMes->GetZaxis())->SetTitle(
"'F# of tracks");
1169 ((TAxis *)mPtEtaGood->GetXaxis())->SetTitle(
"`h# (of parent)");
1170 ((TAxis *)mPtEtaGood->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1171 ((TAxis *)mPtEtaGood->GetZaxis())->SetTitle(
"'F# of tracks");
1172 ((TAxis *)mPtEtaBad->GetXaxis())->SetTitle(
"`h# (of parent)");
1173 ((TAxis *)mPtEtaBad->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1174 ((TAxis *)mPtEtaBad->GetZaxis())->SetTitle(
"'F# of tracks");
1175 ((TAxis *)mPtEtaUnclean->GetXaxis())->SetTitle(
"`h# (of parent)");
1176 ((TAxis *)mPtEtaUnclean->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1177 ((TAxis *)mPtEtaUnclean->GetZaxis())->SetTitle(
"'F# of tracks");
1178 ((TAxis *)mPtEtaMesUnclean->GetXaxis())->SetTitle(
"`h# (of parent)");
1179 ((TAxis *)mPtEtaMesUnclean->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1180 ((TAxis *)mPtEtaMesUnclean->GetZaxis())->SetTitle(
"'F# of tracks");
1181 ((TAxis *)mPtEtaUncleanGood->GetXaxis())->SetTitle(
"`h# (of parent)");
1182 ((TAxis *)mPtEtaUncleanGood->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1183 ((TAxis *)mPtEtaUncleanGood->GetZaxis())->SetTitle(
"'F# of tracks");
1184 ((TAxis *)mPtEtaMesUncleanGood->GetXaxis())->SetTitle(
"`h# (of parent)");
1185 ((TAxis *)mPtEtaMesUncleanGood->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1186 ((TAxis *)mPtEtaMesUncleanGood->GetZaxis())->SetTitle(
"'F# of tracks");
1188 ((TAxis *)mPtEtaSplit->GetXaxis())->SetTitle(
"`h# (of parent)");
1189 ((TAxis *)mPtEtaSplit->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1190 ((TAxis *)mPtEtaSplit->GetZaxis())->SetTitle(
"'F# of tracks");
1191 ((TAxis *)mPtEtaSplitGood->GetXaxis())->SetTitle(
"`h# (of parent)");
1192 ((TAxis *)mPtEtaSplitGood->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1193 ((TAxis *)mPtEtaSplitGood->GetZaxis())->SetTitle(
"'F# of tracks");
1194 ((TAxis *)mPtEtaSplitLoliGood->GetXaxis())->SetTitle(
"`h# (of parent)");
1195 ((TAxis *)mPtEtaSplitLoliGood->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1196 ((TAxis *)mPtEtaSplitLoliGood->GetZaxis())->SetTitle(
"'F# of tracks");
1198 ((TAxis *)mPtEtaFVtx->GetXaxis())->SetTitle(
"`h# (of parent)");
1199 ((TAxis *)mPtEtaFVtx->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1200 ((TAxis *)mPtEtaFVtx->GetZaxis())->SetTitle(
"'F# of tracks");
1201 ((TAxis *)mPtEtaLookLikeGood->GetXaxis())->SetTitle(
"`h# (of parent)");
1202 ((TAxis *)mPtEtaLookLikeGood->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1203 ((TAxis *)mPtEtaLookLikeGood->GetZaxis())->SetTitle(
"'F# of tracks");
1204 ((TAxis *)mPtEtaContamination->GetXaxis())->SetTitle(
"`h# (of parent)");
1205 ((TAxis *)mPtEtaContamination->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1206 ((TAxis *)mPtEtaContamination->GetZaxis())->SetTitle(
"'F# of tracks");
1207 ((TAxis *)mPtEtaContaWoSplits->GetXaxis())->SetTitle(
"`h# (of parent)");
1208 ((TAxis *)mPtEtaContaWoSplits->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1209 ((TAxis *)mPtEtaContaWoSplits->GetZaxis())->SetTitle(
"'F# of tracks");
1211 ((TAxis *)mPtEta10PointTracks->GetXaxis())->SetTitle(
"`h# (of parent)");
1212 ((TAxis *)mPtEta10PointTracks->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1213 ((TAxis *)mPtEta10PointTracks->GetZaxis())->SetTitle(
"'F# of tracks");
1214 ((TAxis *)mPtEtaWrongCharge->GetXaxis())->SetTitle(
"`h# (of parent)");
1215 ((TAxis *)mPtEtaWrongCharge->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1216 ((TAxis *)mPtEtaWrongCharge->GetZaxis())->SetTitle(
"'F# of tracks");
1217 ((TAxis *)mPtEtaWrongPosCharge->GetXaxis())->SetTitle(
"`h# (of parent)");
1218 ((TAxis *)mPtEtaWrongPosCharge->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1219 ((TAxis *)mPtEtaWrongPosCharge->GetZaxis())->SetTitle(
"'F# of tracks");
1221 ((TAxis *)mPtEtaGoodG->GetXaxis())->SetTitle(
"`h# (of parent)");
1222 ((TAxis *)mPtEtaGoodG->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1223 ((TAxis *)mPtEtaGoodG->GetZaxis())->SetTitle(
"'F# of tracks");
1224 ((TAxis *)mPtEtaGoodF->GetXaxis())->SetTitle(
"`h# (of parent)");
1225 ((TAxis *)mPtEtaGoodF->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1226 ((TAxis *)mPtEtaGoodF->GetZaxis())->SetTitle(
"'F# of tracks");
1227 ((TAxis *)mPtEtaGoodRatio->GetXaxis())->SetTitle(
"`h# (of parent)");
1228 ((TAxis *)mPtEtaGoodRatio->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1229 ((TAxis *)mPtEtaGoodRatio->GetZaxis())->SetTitle(
"ratio");
1230 ((TAxis *)mPtEtaBadG->GetXaxis())->SetTitle(
"`h# (of parent)");
1231 ((TAxis *)mPtEtaBadG->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1232 ((TAxis *)mPtEtaBadG->GetZaxis())->SetTitle(
"'F# of tracks");
1233 ((TAxis *)mPtEtaBadF->GetXaxis())->SetTitle(
"`h# (of parent)");
1234 ((TAxis *)mPtEtaBadF->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1235 ((TAxis *)mPtEtaBadF->GetZaxis())->SetTitle(
"'F# of tracks");
1236 ((TAxis *)mPtEtaBadRatio->GetXaxis())->SetTitle(
"`h# (of parent)");
1237 ((TAxis *)mPtEtaBadRatio->GetYaxis())->SetTitle(
"p?'c#! [GeV] (of parent)");
1238 ((TAxis *)mPtEtaBadRatio->GetZaxis())->SetTitle(
"ratio");
1240 ((TAxis *)mGLengthDistTrackAng->GetXaxis())->SetTitle(
"angle of track endings");
1241 ((TAxis *)mGLengthDistTrackAng->GetYaxis())->SetTitle(
"length dist. of last point");
1242 ((TAxis *)mGLengthDistTrackAng->GetZaxis())->SetTitle(
"'F# of track endings");
1243 ((TAxis *)mFLengthDistTrackAng->GetXaxis())->SetTitle(
"angle of track endings");
1244 ((TAxis *)mFLengthDistTrackAng->GetYaxis())->SetTitle(
"length dist. of last point");
1245 ((TAxis *)mFLengthDistTrackAng->GetZaxis())->SetTitle(
"'F# of track endings");
1246 ((TAxis *)mGCircleDistTrackAng->GetXaxis())->SetTitle(
"angle of track endings");
1247 ((TAxis *)mGCircleDistTrackAng->GetYaxis())->SetTitle(
"circle dist. of last point");
1248 ((TAxis *)mGCircleDistTrackAng->GetZaxis())->SetTitle(
"'F# of track endings");
1249 ((TAxis *)mFCircleDistTrackAng->GetXaxis())->SetTitle(
"angle of track endings");
1250 ((TAxis *)mFCircleDistTrackAng->GetYaxis())->SetTitle(
"circle dist. of last point");
1251 ((TAxis *)mFCircleDistTrackAng->GetZaxis())->SetTitle(
"'F# of track endings");
1252 ((TAxis *)mSetupTime->GetXaxis())->SetTitle(
"Zeit [s]");
1253 ((TAxis *)mSetupTime->GetYaxis())->SetTitle(
"Ereignisse");
1254 ((TAxis *)mTrackingTime->GetXaxis())->SetTitle(
"Zeit [s]");
1255 ((TAxis *)mTrackingTime->GetYaxis())->SetTitle(
"Ereignisse");
1256 ((TAxis *)mExtensionTime->GetXaxis())->SetTitle(
"Zeit [s]");
1257 ((TAxis *)mExtensionTime->GetYaxis())->SetTitle(
"Ereignisse");
1258 ((TAxis *)mSplitTime->GetXaxis())->SetTitle(
"Zeit [s]");
1259 ((TAxis *)mSplitTime->GetYaxis())->SetTitle(
"Ereignisse");
1260 ((TAxis *)mFitTime->GetXaxis())->SetTitle(
"Zeit [s]");
1261 ((TAxis *)mFitTime->GetYaxis())->SetTitle(
"Ereignisse");
1262 ((TAxis *)mTotalTime->GetXaxis())->SetTitle(
"Zeit [s]");
1263 ((TAxis *)mTotalTime->GetYaxis())->SetTitle(
"Ereignisse");
1269 void StFtpcTrackEvaluator::GeantHitInit(St_g2t_ftp_hit *g2t_ftp_hit)
1275 Int_t NumGeantHits = g2t_ftp_hit->GetNRows();
1276 g2t_ftp_hit_st *point_st = g2t_ftp_hit->GetTable();
1278 mGeantHits =
new TObjArray(NumGeantHits);
1281 {
for (Int_t i = 0; i < NumGeantHits; i++, point_st++) {
1284 ((
StFtpcConfMapPoint *)mGeantHits->At(i))->SetNextHitNumber(point_st->next_tr_hit_p-1);
1294 void StFtpcTrackEvaluator::GeantTrackInit(St_g2t_track *g2t_track, St_g2t_ftp_hit *g2t_ftp_hit)
1299 Int_t NumGeantTracks = g2t_track->GetNRows();
1300 g2t_track_st *track_st = g2t_track->GetTable();
1301 mGeantTracks =
new TObjArray(NumGeantTracks);
1303 Int_t NumFtpcGeantTracks = 0;
1304 Int_t ftpc_hits = 0;
1306 mFtpcTrackNum->SetFill(NumGeantTracks, -1);
1309 {
for (Int_t i = 0; i < NumGeantTracks; i++, track_st++) {
1310 ftpc_hits = track_st->n_ftp_hit;
1314 mGHitsOnTrack->Fill(ftpc_hits);
1315 mGeantTracks->AddAt(
new StFtpcTrack(NumFtpcGeantTracks), NumFtpcGeantTracks);
1317 TObjArray *points = t->GetHits();
1320 t->SetPx(track_st->p[0]);
1321 t->SetPy(track_st->p[1]);
1322 t->SetPz(track_st->p[2]);
1325 t->SetCharge((Int_t)track_st->charge);
1326 t->SetPid(track_st->ge_pid);
1332 if (track_st->start_vertex_p == 1) {
1333 t->ComesFromMainVertex((Bool_t) kTRUE);
1338 t->ComesFromMainVertex((Bool_t) kFALSE);
1341 MIntArray *hitnumber = t->GetHitNumbers();
1342 hitnumber->Set(ftpc_hits);
1343 ((
StFtpcConfMapPoint *)mGeantHits->At(track_st->hit_ftp_p - 1))->SetTrackNumber(NumFtpcGeantTracks);
1344 mFtpcTrackNum->AddAt(NumFtpcGeantTracks, i);
1345 points->Expand(ftpc_hits);
1346 points->AddAt(mGeantHits->At(track_st->hit_ftp_p - 1), 0);
1347 hitnumber->AddAt(track_st->hit_ftp_p - 1, 0);
1350 {
for(Int_t j = 1; j < ftpc_hits; j++) {
1351 Int_t number = ((
StFtpcConfMapPoint *)mGeantHits->At(hitnumber->At(j-1)))->GetNextHitNumber();
1353 points->AddAt(mGeantHits->At(number), j);
1354 hitnumber->AddAt(number, j);
1358 NumFtpcGeantTracks++;
1360 if (ftpc_hits>StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide()) {
1362 mLongTrackClusters += ftpc_hits;
1364 if (ftpc_hits > mMaxClusters) {
1365 mMaxClusters = ftpc_hits;
1371 mShortTrackClusters += ftpc_hits;
1376 if (IsGoodTrack(t)) {
1378 if (ftpc_hits == StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide()) {
1379 mPtEta10PointTracks->Fill(TMath::Abs(t->GetEta()), t->GetPt());
1383 mGoodGeantPoints += ftpc_hits;
1392 void StFtpcTrackEvaluator::FastSimHitInit(St_ffs_gepoint *ffs_hit)
1397 Int_t NumFastSimHits = ffs_hit->GetNRows();
1398 mClusterArr->SetFill(NumFastSimHits, 0);
1399 mGoodFastSimHitsArr->SetFill(NumFastSimHits, -1);
1400 ffs_gepoint_st *point_st = ffs_hit->GetTable();
1401 mFastSimHits =
new TObjArray(NumFastSimHits);
1404 {
for (Int_t i = 0; i < NumFastSimHits; i++, point_st++) {
1408 p->SetTrackNumber(mFtpcTrackNum->At(point_st->ge_track_p - 1));
1411 if (IsGoodTrack((
StFtpcTrack*)mGeantTracks->At(p->GetTrackNumber()))) {
1412 mGoodFastSimHitsArr->AddAt(1, i);
1416 mGoodFastSimHitsArr->AddAt(0, i);
1423 void StFtpcTrackEvaluator::ParentTrackInit()
1427 mParent->Set(mFoundTracks->GetEntriesFast());
1428 mNumParentTracks->SetFill(mFoundTracks->GetEntriesFast()*StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(), -1);
1430 Int_t actual_track = -1;
1433 for (Int_t t_counter = 0; t_counter < mFoundTracks->GetEntriesFast(); t_counter++) {
1435 TObjArray *hits = (TObjArray*) track->GetHits();
1436 mUnclean[t_counter] = (Bool_t)kFALSE;
1438 if (track->ComesFromMainVertex()) {
1439 mFoundVertexTracks++;
1443 mFoundNonVertexTracks++;
1446 Int_t max_hits = hits->GetEntriesFast();
1448 for (Int_t h_counter = 0; h_counter < StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(); h_counter++) {
1450 if (h_counter < max_hits) {
1452 mParentTrack->AddLast(((
StFtpcPoint*)mFastSimHits->At(hit->GetHitNumber()))->GetTrackNumber());
1453 mParentTracks->AddLast(mParentTrack->AtLast());
1457 mParentTrack->AddLast(-1);
1458 mParentTracks->AddLast(-1);
1462 for (Int_t cluster1 = 0; cluster1 < max_hits; cluster1++) {
1464 if (mParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster1) != -1) {
1465 mNumParentTracks->AddAt(1, t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster1);
1467 for (Int_t cluster2 = cluster1+1; cluster2 < max_hits; cluster2++) {
1469 if (mParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster2) != -1) {
1471 if (mParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster1) == mParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster2)) {
1472 mParentTracks->AddAt(-1, t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster2);
1473 mNumParentTracks->AddAt(mNumParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster1) + 1, t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster1);
1477 if (actual_track != t_counter) {
1478 mUncleanTracksArr->AddLast(t_counter);
1480 mUnclean[t_counter] = (Bool_t)kTRUE;
1481 mPtEtaMesUnclean->Fill(TMath::Abs(((
StFtpcTrack *)mFoundTracks->At(t_counter))->GetEta()), ((
StFtpcTrack *)mFoundTracks->At(t_counter))->GetPt());
1482 actual_track = t_counter;
1493 for (Int_t cluster = 0; cluster < StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(); cluster++) {
1495 if (mNumParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster) >= max) {
1496 max = mNumParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster);
1497 mParent->AddAt(mParentTrack->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + cluster), t_counter);
1501 EvaluateGoodness(t_counter);
1508 void StFtpcTrackEvaluator::EvaluateGoodness(Int_t t_counter)
1514 mPtEtaF->Fill(TMath::Abs(parent->GetPseudoRapidity()), parent->GetPt());
1515 mPtEtaFMes->Fill(TMath::Abs(track->GetPseudoRapidity()), track->GetPt());
1517 TObjArray *points = track->GetHits();
1519 Int_t wrong_hits_on_this_track = 0;
1521 {
for (Int_t i=0; i<points->GetEntriesFast(); i++) {
1524 if (mParentTrack->At(t_counter*StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide()+i) == mParent->At(t_counter)) {
1525 mClusterArr->AddAt(1, p->GetHitNumber());
1527 if (i == points->GetEntriesFast()-1) {
1535 c.StraightLineFit(track, chi2_1, i);
1536 c.StraightLineFit(track, chi2_2, i-1);
1544 mClusterArr->AddAt(-1, p->GetHitNumber());
1545 wrong_hits_on_this_track++;
1547 if (i == points->GetEntriesFast()-1) {
1555 c.StraightLineFit(track, chi2_1, i);
1556 c.StraightLineFit(track, chi2_2, i-1);
1565 if (IsUncleanTrack(t_counter)) {
1566 mPtEtaUnclean->Fill(TMath::Abs(((
StFtpcTrack *)mGeantTracks->At(mParent->At(t_counter)))->GetEta()), ((
StFtpcTrack *)mGeantTracks->At(mParent->At(t_counter)))->GetPt());
1568 if (IsGoodTrack(parent) && track->ComesFromMainVertex()) {
1569 mGoodFoundPoints += (track->GetNumberOfPoints() - wrong_hits_on_this_track);
1570 mPtEtaUncleanGood->Fill(TMath::Abs(((
StFtpcTrack *)mGeantTracks->At(mParent->At(t_counter)))->GetEta()), ((
StFtpcTrack *)mGeantTracks->At(mParent->At(t_counter)))->GetPt());
1571 mPtEtaMesUncleanGood->Fill(TMath::Abs(track->GetEta()), track->GetPt());
1572 mUncleanGoodTracks++;
1576 if (IsGoodTrack(parent) && IsCleanTrack(t_counter) && track->ComesFromMainVertex()) {
1578 mGoodFoundPoints += track->GetNumberOfPoints();
1579 mPtEtaGoodF->Fill(TMath::Abs(parent->GetPseudoRapidity()), parent->GetPt());
1583 mPtEtaBadF->Fill(TMath::Abs(parent->GetPseudoRapidity()), parent->GetPt());
1585 if (parent->GetPid() <= 3) {
1589 if(!(parent->ComesFromMainVertex())) {
1594 if (track->ComesFromMainVertex()) {
1595 mPtEtaFVtx->Fill(TMath::Abs(parent->GetPseudoRapidity()), parent->GetPt());
1597 if ((IsUncleanTrack(t_counter) || (IsCleanTrack(t_counter) && (!IsGoodTrack(parent))))) {
1598 mPtEtaLookLikeGood->Fill(TMath::Abs(parent->GetPseudoRapidity()), parent->GetPt());
1599 mLookLikeGoodTracks++;
1607 void StFtpcTrackEvaluator::DivideHistos()
1612 mPtEtaGood->Divide(mPtEtaGoodF, mPtEtaF);
1613 mPtEtaBad->Divide(mPtEtaBadF, mPtEtaF);
1614 mPtEtaGoodRatio->Divide(mPtEtaGoodF, mPtEtaGoodG);
1615 mPtEtaBadRatio->Divide(mPtEtaBadF, mPtEtaBadG);
1616 mPtEtaContamination->Divide(mPtEtaLookLikeGood, mPtEtaFVtx);
1624 void StFtpcTrackEvaluator::FillGCutHistos()
1631 for (Int_t t_counter = 0; t_counter < mGeantTracks->GetEntriesFast(); t_counter++) {
1633 TObjArray *hits = (TObjArray*) track->GetHits();
1635 if (IsGoodMainVertexTrack(track)) {
1636 mDcaGMainVertex->Fill(track->CalcDca(mVertex, 0));
1639 if (IsGoodNonVertexTrack(track)) {
1640 mDcaGNonVertex->Fill(track->CalcDca(mVertex, 0));
1643 if (IsGoodTrack(track)) {
1645 mEtaNghits->Fill(hits->GetEntriesFast(), TMath::Abs(track->GetPseudoRapidity()));
1646 mPtEtaGoodG->Fill(TMath::Abs(track->GetPseudoRapidity()), track->GetPt());
1648 for (Int_t h_counter = 2; h_counter < hits->GetEntriesFast() && h_counter < StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(); h_counter++) {
1652 if (h_counter == 2) {
1653 mGTracklAngAll->Fill(t.StFtpcConfMapper::TrackletAngle(track, h_counter+1));
1654 mGTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter+1), (Float_t)h_counter+1);
1658 mGTrackAngAll->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter+1));
1659 mGTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter+1), (Float_t)h_counter+1);
1661 t.StraightLineFit(track, coeff, h_counter-1);
1662 hit->SetDist(t.CalcDistance(hit, coeff+0), t.CalcDistance(hit, coeff+2));
1664 mGLengthDistTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter+1), (Float_t)hit->GetLengthDist());
1665 mGCircleDistTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter+1), (Float_t)hit->GetCircleDist());
1667 mGCircleDistAll->Fill(hit->GetCircleDist());
1668 mGLengthDistAll->Fill(hit->GetLengthDist());
1669 mGCircleDist->Fill((Float_t)hit->GetCircleDist(),(Float_t)h_counter+1);
1670 mGLengthDist->Fill((Float_t)hit->GetLengthDist(), (Float_t)h_counter+1);
1671 mGCircleLength->Fill((Float_t)hit->GetLengthDist(), (Float_t)hit->GetCircleDist());
1677 mPtEtaBadG->Fill(TMath::Abs(track->GetPseudoRapidity()), track->GetPt());
1685 void StFtpcTrackEvaluator::FillFCutHistos()
1692 for (Int_t t_counter = 0; t_counter < mFoundTracks->GetEntriesFast(); t_counter++) {
1694 TObjArray *hits = (TObjArray*) track->GetHits();
1697 if (track->GetNumberOfPoints() < track->GetNMax()) {
1701 if (hits->GetEntriesFast() >= 3) {
1703 mEtaNfhits->Fill(hits->GetEntriesFast(), TMath::Abs(track->GetPseudoRapidity()));
1705 for (Int_t h_counter = 3; h_counter < hits->GetEntriesFast(); h_counter++) {
1709 if (h_counter == 3) {
1710 mFTracklAngAll->Fill(t.StFtpcConfMapper::TrackletAngle(track, h_counter));
1711 mFTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter), (Float_t)h_counter);
1715 mFTrackAngAll->Fill(t.StFtpcConfMapper::TrackletAngle(track, h_counter));
1716 mFTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter), (Float_t)h_counter);
1718 t.StraightLineFit(track, coeff, h_counter-1);
1719 hit->SetDist(t.CalcDistance(hit, coeff+0), t.CalcDistance(hit, coeff+2));
1721 mFLengthDistTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter+1), (Float_t)hit->GetLengthDist());
1722 mFCircleDistTrackAng->Fill((Float_t)t.StFtpcConfMapper::TrackletAngle(track, h_counter+1), (Float_t)hit->GetCircleDist());
1724 mFCircleDistAll->Fill(hit->GetCircleDist());
1725 mFLengthDistAll->Fill(hit->GetLengthDist());
1726 mFCircleDist->Fill((Float_t)hit->GetCircleDist(), (Float_t)h_counter);
1727 mFLengthDist->Fill((Float_t)hit->GetLengthDist(), (Float_t)h_counter);
1728 mFCircleLength->Fill((Float_t)hit->GetLengthDist(), (Float_t)hit->GetCircleDist());
1738 void StFtpcTrackEvaluator::Loop()
1743 for (Int_t t_counter = 0; t_counter < mFoundTracks->GetEntriesFast(); t_counter++) {
1745 TObjArray *fhits = (TObjArray*) track->GetHits();
1747 for (Int_t h_counter = 0; h_counter < fhits->GetEntriesFast(); h_counter++) {
1757 void StFtpcTrackEvaluator::WriteHistos()
1762 mFile->Delete(
"*;1");
1764 mNumGeantHits->Write();
1765 mNumFoundHits->Write();
1766 mNumGeantTracks->Write();
1767 mNumFoundTracks->Write();
1769 mNumFoundVertexTracks->Write();
1770 mNumFoundNonVertexTracks->Write();
1772 mNumLookLikeGoodTracks->Write();
1773 mNumElectronTracks->Write();
1774 mNumNonVertexTracks->Write();
1775 mNumGoodGTracks->Write();
1776 mNumGoodFTracks->Write();
1777 mGoodRatio->Write();
1778 mContamination->Write();
1779 mContaWoSplit->Write();
1780 mNumSplitTracks->Write();
1781 mNumSplitGoodTracks->Write();
1782 mNumSplitLoliGoodTracks->Write();
1783 mNumUncleanTracks->Write();
1784 mNumUncleanGoodTracks->Write();
1785 mNumLongTracks->Write();
1786 mNumLongTrackClusters->Write();
1787 mNumShortTracks->Write();
1788 mNumShortTrackClusters->Write();
1789 mNumTooShortTracks->Write();
1791 mGHitsOnTrack->Write();
1792 mFHitsOnTrack->Write();
1794 mNumGoodGeantPoints->Write();
1795 mNumGoodFoundPoints->Write();
1796 mGoodPointRatio->Write();
1798 mNumParents->Write();
1799 mNumWrongHits->Write();
1800 mNumWrongHitsAll->Write();
1821 mPRelErrqok->Write();
1824 mEtaNghits->Write();
1825 mEtaNfhits->Write();
1828 mPtEtaFMes->Write();
1829 mPtEtaGood->Write();
1831 mPtEtaUnclean->Write();
1832 mPtEtaMesUnclean->Write();
1833 mPtEtaUncleanGood->Write();
1834 mPtEtaMesUncleanGood->Write();
1836 mPtEtaSplit->Write();
1837 mPtEtaSplitGood->Write();
1838 mPtEtaSplitLoliGood->Write();
1840 mPtEtaGoodG->Write();
1841 mPtEtaGoodF->Write();
1842 mPtEtaGoodRatio->Write();
1843 mPtEtaBadG->Write();
1844 mPtEtaBadF->Write();
1845 mPtEtaBadRatio->Write();
1847 mPtEtaFVtx->Write();
1848 mPtEtaLookLikeGood->Write();
1849 mPtEtaContamination->Write();
1850 mPtEtaContaWoSplits->Write();
1852 mPtEta10PointTracks->Write();
1853 mPtEtaWrongCharge->Write();
1854 mPtEtaWrongPosCharge->Write();
1856 mDcaFMainVertex->Write();
1857 mDcaFNonVertex->Write();
1858 mDcaGMainVertex->Write();
1859 mDcaGNonVertex->Write();
1861 mGLengthDistTrackAng->Write();
1862 mGCircleDistTrackAng->Write();
1863 mFLengthDistTrackAng->Write();
1864 mFCircleDistTrackAng->Write();
1866 mGTracklAngAll->Write();
1867 mGTrackAngAll->Write();
1868 mGCircleDistAll->Write();
1869 mGLengthDistAll->Write();
1871 mGTrackAng->Write();
1872 mGCircleDist->Write();
1873 mGLengthDist->Write();
1875 mGCircleLength->Write();
1877 mFTracklAngAll->Write();
1878 mFTrackAngAll->Write();
1879 mFCircleDistAll->Write();
1880 mFLengthDistAll->Write();
1882 mFTrackAng->Write();
1883 mFCircleDist->Write();
1884 mFLengthDist->Write();
1886 mFCircleLength->Write();
1888 mPRatioDist->Write();
1889 mPRatioDistSplit->Write();
1891 mSetupTime->Write();
1892 mTrackingTime->Write();
1893 mExtensionTime->Write();
1894 mSplitTime->Write();
1896 mTotalTime->Write();
1902 void StFtpcTrackEvaluator::FillMomentumHistos()
1909 for (Int_t t_counter = 0; t_counter<mFoundTracks->GetEntriesFast(); t_counter++) {
1911 ftrack = (
StFtpcTrack *)mFoundTracks->At(t_counter);
1912 gtrack = (
StFtpcTrack *)mGeantTracks->At(mParent->At(t_counter));
1914 mPtot->Fill((Float_t)gtrack->GetP(), (Float_t)ftrack->GetP());
1915 mPt->Fill((Float_t)gtrack->GetPt(), (Float_t)ftrack->GetPt());
1916 mPx->Fill((Float_t)gtrack->GetPx(), (Float_t)ftrack->GetPx());
1917 mPy->Fill((Float_t)gtrack->GetPy(), (Float_t)ftrack->GetPy());
1918 mPz->Fill((Float_t)gtrack->GetPz(), (Float_t)ftrack->GetPz());
1920 mPtotDiff->Fill((Float_t)StFormulary::RelDiff(ftrack->GetP(), (Float_t)gtrack->GetP()));
1921 mPtDiff->Fill((Float_t)StFormulary::RelDiff(ftrack->GetPt(), (Float_t)gtrack->GetPt()));
1922 mPxDiff->Fill((Float_t)StFormulary::RelDiff(ftrack->GetPx(), (Float_t)gtrack->GetPx()));
1923 mPyDiff->Fill((Float_t)StFormulary::RelDiff(ftrack->GetPy(), (Float_t)gtrack->GetPy()));
1924 mPzDiff->Fill((Float_t)StFormulary::RelDiff(ftrack->GetPz(), (Float_t)gtrack->GetPz()));
1926 mPtotAcc->Fill(ftrack->GetP()/gtrack->GetP());
1927 mPtAcc->Fill(ftrack->GetPt()/gtrack->GetPt());
1928 mPxAcc->Fill(ftrack->GetPx()/gtrack->GetPx());
1929 mPyAcc->Fill(ftrack->GetPy()/gtrack->GetPy());
1930 mPzAcc->Fill(ftrack->GetPz()/gtrack->GetPz());
1932 mPRelErr->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt(), (ftrack->GetP() - gtrack->GetP())/gtrack->GetP());
1933 mPRelDiff->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt(), StFormulary::RelDiff(ftrack->GetP(), gtrack->GetP()));
1935 if (ftrack->GetCharge() != gtrack->GetCharge()) {
1936 mPtEtaWrongCharge->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt());
1938 if(ftrack->GetCharge() > 0.) {
1939 mPtEtaWrongPosCharge->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt());
1944 mPRelErrqok->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt(), (ftrack->GetP() - gtrack->GetP())/gtrack->GetP());
1952 void StFtpcTrackEvaluator::FillMomentumHistos(Int_t t_counter)
1959 mPtot->Fill(gtrack->GetP(), ftrack->GetP());
1960 mPt->Fill(gtrack->GetPt(), ftrack->GetPt());
1961 mPx->Fill(gtrack->GetPx(), ftrack->GetPx());
1962 mPy->Fill(gtrack->GetPy(), ftrack->GetPy());
1963 mPz->Fill(gtrack->GetPz(), ftrack->GetPz());
1965 mPtotDiff->Fill(StFormulary::RelDiff(ftrack->GetP(), gtrack->GetP()));
1966 mPtDiff->Fill(StFormulary::RelDiff(ftrack->GetPt(), gtrack->GetPt()));
1967 mPxDiff->Fill(StFormulary::RelDiff(ftrack->GetPx(), gtrack->GetPx()));
1968 mPyDiff->Fill(StFormulary::RelDiff(ftrack->GetPy(), gtrack->GetPy()));
1969 mPzDiff->Fill(StFormulary::RelDiff(ftrack->GetPz(), gtrack->GetPz()));
1971 mPtotAcc->Fill(ftrack->GetP()/gtrack->GetP());
1972 mPtAcc->Fill(ftrack->GetPt()/gtrack->GetPt());
1973 mPxAcc->Fill(ftrack->GetPx()/gtrack->GetPx());
1974 mPyAcc->Fill(ftrack->GetPy()/gtrack->GetPy());
1975 mPzAcc->Fill(ftrack->GetPz()/gtrack->GetPz());
1977 mPRelErr->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt(), (ftrack->GetP() - gtrack->GetP())/gtrack->GetP());
1978 mPRelDiff->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt(), StFormulary::RelDiff(ftrack->GetP(), gtrack->GetP()));
1980 if (ftrack->GetCharge() != gtrack->GetCharge()) {
1981 mPtEtaWrongCharge->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt());
1983 if(ftrack->GetCharge() > 0.) {
1984 mPtEtaWrongPosCharge->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt());
1989 mPRelErrqok->Fill(TMath::Abs(gtrack->GetEta()), gtrack->GetPt(), (ftrack->GetP() - gtrack->GetP())/gtrack->GetP());
1996 void StFtpcTrackEvaluator::FillParentHistos()
2000 for (Int_t t_counter = 0; t_counter < mFoundTracks->GetEntriesFast(); t_counter++) {
2002 Int_t num_histo = ((
StFtpcTrack *)mFoundTracks->At(t_counter))->GetNumberOfPoints();
2004 Int_t num_parents = 0;
2006 for (Int_t h_counter = 0; h_counter < StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(); h_counter++) {
2009 if (mNumParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + h_counter) != -1) {
2012 if (mParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + h_counter) != mParent->At(t_counter)) {
2013 num_hits += mNumParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + h_counter);
2018 mNumParents->Fill(num_parents);
2019 mNumWrongHits->Fill((Float_t)num_hits, (Float_t)num_histo);
2020 mNumWrongHitsAll->Fill(num_hits);
2025 void StFtpcTrackEvaluator::FillParentHistos(Int_t t_counter)
2029 Int_t num_histo = ((
StFtpcTrack *)mFoundTracks->At(t_counter))->GetNumberOfPoints();
2031 Int_t num_parents = 0;
2033 for (Int_t h_counter = 0; h_counter < StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide(); h_counter++) {
2036 if (mNumParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + h_counter) != -1) {
2039 if (mParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + h_counter) != mParent->At(t_counter)) {
2040 num_hits += mNumParentTracks->At(t_counter * StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide() + h_counter);
2045 mNumParents->Fill(num_parents);
2046 mNumWrongHits->Fill((Float_t)num_hits, (Float_t)num_histo);
2047 mNumWrongHitsAll->Fill(num_hits);
2051 void StFtpcTrackEvaluator::FillHitsOnTrack(TObjArray *trackarray, Char_t c)
2059 histo = mGHitsOnTrack;
2063 histo = mFHitsOnTrack;
2066 {
for (Int_t i = 0; i < trackarray->GetEntriesFast(); i++) {
2067 histo->Fill(((
StFtpcTrack*)trackarray->At(i))->GetNumberOfPoints());
2074 void StFtpcTrackEvaluator::CalcSplitTracks()
2090 for (Int_t track1 = 0; track1 < mFoundTracks->GetEntriesFast(); track1++) {
2092 for (Int_t track2 = track1+1; track2 < mFoundTracks->GetEntriesFast(); track2++) {
2097 r1 = t1->GetRLast();
2098 r2 = t2->GetRLast();
2099 phi1 = t1->GetAlphaLast();
2100 phi2 = t2->GetAlphaLast();
2101 R1 = t1->GetRFirst();
2102 R2 = t2->GetRFirst();
2103 Phi1 = t1->GetAlphaFirst();
2104 Phi2 = t2->GetAlphaFirst();
2106 dist = (TMath::Sqrt(r2*r2+r1*r1-2*r1*r2*(TMath::Cos(phi1)*TMath::Cos(phi2)+TMath::Sin(phi1)*TMath::Sin(phi2))) +
2107 TMath::Sqrt(R2*R2+R1*R1-2*R1*R2*(TMath::Cos(Phi1)*TMath::Cos(Phi2)+TMath::Sin(Phi1)*TMath::Sin(Phi2)))) / 2.;
2108 ratio = (Double_t)(t1->GetNumberOfPoints() + t2->GetNumberOfPoints()) / (Double_t)(t1->GetNMax() + t2->GetNMax());
2110 if (!(t1->GetRowsWithPoints() & t2->GetRowsWithPoints()) && (t1->GetHemisphere() == t2->GetHemisphere())) {
2111 mPRatioDist->Fill(dist, ratio);
2114 if (mParent->At(track1) == mParent->At(track2)) {
2118 mSplitTracksArr->AddLast(track1);
2119 mSplitTracksArr->AddLast(track2);
2122 mPtEtaSplit->Fill(TMath::Abs(track->GetEta()), track->GetPt());
2124 if (ratio) mPRatioDistSplit->Fill(dist, ratio);
2126 if ((IsUncleanTrack(track1) || (IsCleanTrack(track1) && (!IsGoodTrack(track))))) {
2127 mPtEtaSplitLoliGood->Fill(TMath::Abs(track->GetPseudoRapidity()), track->GetPt());
2128 mSplitLoliGoodTracks++;
2131 if (IsGoodTrack(track) && ((
StFtpcTrack*)mFoundTracks->At(track1))->ComesFromMainVertex()) {
2132 mSplitGoodTracksArr->AddLast(track1);
2135 mPtEtaSplitGood->Fill(TMath::Abs(track->GetEta()), track->GetPt());
2145 void StFtpcTrackEvaluator::FillTimeHistos(
StFtpcTracker *tracker)
2149 mSetupTime->Fill(tracker->GetTime((Char_t*)
"init"));
2150 mTrackingTime->Fill(tracker->GetTime((Char_t*)
"main_vertex"));
2151 mExtensionTime->Fill(tracker->GetTime((Char_t*)
"extend"));
2152 mSplitTime->Fill(tracker->GetTime((Char_t*)
"splits"));
2153 mFitTime->Fill(tracker->GetTime((Char_t*)
"fit"));
2154 mTotalTime->Fill(tracker->GetTime());
2160 void StFtpcTrackEvaluator::FillEventHistos()
2165 mNumGeantHits->Fill(GetNumGeantHits());
2166 mNumGeantTracks->Fill(GetNumGeantTracks());
2167 mNumFoundHits->Fill(GetNumFoundHits());
2168 mNumFoundTracks->Fill(GetNumFoundTracks());
2170 mNumFoundVertexTracks->Fill(GetNumFoundVertexTracks());
2171 mNumFoundNonVertexTracks->Fill(GetNumFoundNonVertexTracks());
2173 mNumLookLikeGoodTracks->Fill(GetNumLookLikeGoodTracks());
2174 mNumElectronTracks->Fill(GetNumElectronTracks());
2175 mNumNonVertexTracks->Fill(GetNumNonVertexTracks());
2176 mNumGoodGTracks->Fill(GetNumGoodGeantTracks());
2177 mNumGoodFTracks->Fill(GetNumGoodFoundTracks());
2178 mGoodRatio->Fill(((Float_t)GetNumGoodFoundTracks()-(Float_t)GetNumSplitGoodTracks())/(Float_t)GetNumGoodGeantTracks());
2179 mContamination->Fill((Float_t)GetNumLookLikeGoodTracks()/(Float_t)GetNumFoundVertexTracks());
2180 mContaWoSplit->Fill((Float_t)(GetNumLookLikeGoodTracks()-GetNumSplitLookLikeGoodTracks())/(Float_t)GetNumFoundVertexTracks());
2181 mNumSplitTracks->Fill(GetNumSplitTracks());
2182 mNumSplitGoodTracks->Fill(GetNumSplitGoodTracks());
2183 mNumSplitLoliGoodTracks->Fill(GetNumSplitLookLikeGoodTracks());
2184 mNumUncleanTracks->Fill(GetNumUncleanTracks());
2185 mNumUncleanGoodTracks->Fill(GetNumUncleanGoodTracks());
2186 mNumLongTracks->Fill(GetNumLongTracks());
2187 mNumLongTrackClusters->Fill(GetNumLongTrackClusters());
2188 mNumShortTracks->Fill(GetNumShortTracks());
2189 mNumShortTrackClusters->Fill(GetNumShortTrackClusters());
2190 mNumTooShortTracks->Fill(GetNumTooShortTracks());
2191 mNumGoodGeantPoints->Fill(GetNumGoodGeantPoints());
2192 mNumGoodFoundPoints->Fill(GetNumGoodFoundPoints());
2193 mGoodPointRatio->Fill((Float_t)GetNumGoodFoundPoints()/(Float_t)GetNumGoodGeantPoints());
2198 void StFtpcTrackEvaluator::GetGoodHits(TObjArray *good_clusters)
2202 good_clusters->Clear();
2204 {
for (Int_t i = 0; i < mGeantHits->GetEntriesFast(); i++) {
2208 {
for (Int_t j = 0; j < mFtpcTrackNum->GetSize(); j++) {
2210 if (mFtpcTrackNum->At(j) == hit->GetTrackNumber() && IsGoodTrack((
StFtpcTrack*)mGeantTracks->At(j))) {
2211 LOG_INFO << i <<
" " << j <<
" " << mFtpcTrackNum->At(j) <<
" " << hit->GetTrackNumber() <<
" " << ((
StFtpcTrack*)mGeantTracks->At(j))->GetEta() << endm;
2212 good_clusters->AddLast(hit);
2221 void StFtpcTrackEvaluator::GeantInfo()
2225 LOG_INFO <<
"Geant hits : " << GetNumGeantHits() << endm;
2226 LOG_INFO <<
"Geant tracks : " << GetNumGeantTracks() << endm;
2227 LOG_INFO <<
"Short tracks : " << GetNumShortTracks() << endm;
2228 LOG_INFO <<
"Long tracks : " << GetNumLongTracks() << endm;
2229 LOG_INFO <<
"Good tracks : " << GetNumGoodGeantTracks() << endm;
2235 void StFtpcTrackEvaluator::ClusterInfo()
2239 LOG_INFO <<
"Short track clusters : " << GetNumShortTrackClusters() << endm;
2240 LOG_INFO <<
"Long track clusters : " << GetNumLongTrackClusters() << endm;
2241 LOG_INFO <<
"Max. track clusters : " << GetMaxClusters() << endm;
2242 LOG_INFO <<
"# of hits on good found tracks: " << GetNumGoodFoundPoints() << endm;
2243 LOG_INFO <<
"# of hits on good geant tracks: " << GetNumGoodGeantPoints() << endm;
2244 LOG_INFO <<
"Ratio of good found clusters : " << (Float_t)GetNumGoodFoundPoints()/(Float_t)GetNumGoodGeantPoints() << endm;
2250 void StFtpcTrackEvaluator::ProblemsInfo()
2254 LOG_INFO <<
"Unclean tracks : " << GetNumUncleanTracks() << endm;
2255 LOG_INFO <<
"Unclean good tracks : " << GetNumUncleanGoodTracks() << endm;
2256 LOG_INFO <<
"Split tracks : " << GetNumSplitTracks() << endm;
2257 LOG_INFO <<
"Split good tracks : " << GetNumSplitGoodTracks() << endm;
2258 LOG_INFO <<
"Split look like good tracks : " << GetNumSplitLookLikeGoodTracks() << endm;
2264 void StFtpcTrackEvaluator::TrackerInfo()
2268 LOG_INFO <<
"Found hits : " << GetNumFoundHits() << endm;
2269 LOG_INFO <<
"Found tracks (vtx/non vtx) : " << GetNumFoundTracks() <<
" (" << GetNumFoundVertexTracks() <<
"/" << GetNumFoundNonVertexTracks() <<
")" << endm;
2270 LOG_INFO <<
"Found good tracks : " << GetNumGoodFoundTracks() << endm;
2271 LOG_INFO <<
"Bad found tracks looking good : " << GetNumLookLikeGoodTracks() << endm;
2272 LOG_INFO <<
"Found electron tracks : " << GetNumElectronTracks() << endm;
2273 LOG_INFO <<
"Found non main vertex tracks : " << GetNumNonVertexTracks() << endm;
2274 LOG_INFO <<
"Found too short tracks : " << GetNumTooShortTracks() << endm;
2276 LOG_INFO <<
"Ratio of good geant tracks : " << ((Float_t)GetNumGoodFoundTracks()-(Float_t)GetNumSplitGoodTracks())/(Float_t)GetNumGoodGeantTracks() << endm;
2277 LOG_INFO << "Contamination : " << (Float_t)GetNumLookLikeGoodTracks()/(Float_t)GetNumFoundVertexTracks() << endm;
2278 LOG_INFO << "Contamination without splits : " << ((Float_t)GetNumLookLikeGoodTracks()-(Float_t)GetNumSplitLookLikeGoodTracks())/(Float_t)GetNumFoundVertexTracks() << endm;
2299 void StFtpcTrackEvaluator::FillCutHistos()
2310 void StFtpcTrackEvaluator::FillHitsOnTrack()
2314 FillHitsOnTrack(mGeantTracks,
'g');
2315 FillHitsOnTrack(mFoundTracks,
'f');
2321 void StFtpcTrackEvaluator::FillFoundHitsOnTrack()
2325 FillHitsOnTrack(mFoundTracks,
'f');
2331 Bool_t StFtpcTrackEvaluator::IsGoodTrack(
StFtpcTrack* track)
2335 if (track->GetPid() > 3 && track->ComesFromMainVertex() && track->GetNumberOfPoints() >= 5 && track->GetNumberOfPoints() <= StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide()) {
2336 return (Bool_t)kTRUE;
2340 return (Bool_t)kFALSE;
2345 Bool_t StFtpcTrackEvaluator::IsGoodMainVertexTrack(
StFtpcTrack* track)
2349 if (track->GetPid() > 3 && track->ComesFromMainVertex() && track->GetNumberOfPoints() >= 5 && track->GetNumberOfPoints() <= StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide()) {
2350 return (Bool_t)kTRUE;
2354 return (Bool_t)kFALSE;
2359 Bool_t StFtpcTrackEvaluator::IsGoodNonVertexTrack(
StFtpcTrack* track)
2363 if (track->GetPid() > 3 && !(track->ComesFromMainVertex()) && track->GetNumberOfPoints() >= 5 && track->GetNumberOfPoints() <= StFtpcTrackingParams::Instance()->NumberOfPadRowsPerSide()) {
2364 return (Bool_t)kTRUE;
2368 return (Bool_t)kFALSE;
2373 void StFtpcTrackEvaluator::ShowTracks()
2377 StFtpcDisplay display(GetFoundHits(), GetFoundTracks(), GetGeantHits(), GetGeantTracks());
2378 display.ShowEvalTracks(mSplitTracksArr, mUncleanTracksArr, mClusterArr);
Char_t * mWritePermission
Name of the data file.
TFile * mFile
Write permission of the data file.
virtual TDataSet * Find(const char *path) const