178 #include "StMessMgr.h"
179 #include "StQAMakerBase.h"
180 #include "StQABookHist.h"
183 #include "StDetectorDbMaker/St_tpcPadConfigC.h"
184 #include "StarRoot/TH1Helper.h"
190 StMaker(name,title), QAMakerType(type) {
193 histsList.Expand(32);
194 histsList.SetOwner();
196 for (i=0;i<32;i++) histsList.AddAt(0,i);
197 histsSet = StQA_Undef;
220 m_ftpc_chargestepW=0;
221 m_ftpc_chargestepE=0;
222 m_ftpc_fcl_radialW=0;
223 m_ftpc_fcl_radialE=0;
228 for (
int i =0; i < 24; ++ i) {
229 mTpcSectorPlot[i] = 0;
230 m_tpc_adc_chargevstb[i] = 0;
231 m_tpc_adc_chargevstbTPX[i] = 0;
232 m_tpc_adc_chargevsrowvstb[i] = 0;
233 m_tpc_adc_chargesum[i] = 0;
234 m_tpc_clust_stats[i] = 0;
235 m_tpc_clust_statsvsrow[i] = 0;
236 m_tpc_clust_charge[i] = 0;
237 m_tpc_clust_chargeTPX[i] = 0;
238 m_tpc_clust_chargesum[i] = 0;
239 m_tpc_clust_chargevstb[i] = 0;
240 m_tpc_clust_chargevstbTPX[i] = 0;
241 m_tpc_clust_chargevsrow[i] = 0;
243 m_tpc_adc_chargepersector = 0;
244 m_tpc_adc_chargepersectorTPX = 0;
245 m_tpc_adc_numhitsvsrowvssector = 0;
246 m_tpc_clust_pxltb = 0;
247 m_tpc_clust_pxltbTPX = 0;
248 m_tpc_clust_pxlp = 0;
249 m_tpc_clust_pxlpTPX = 0;
250 m_tpc_clust_numclust = 0;
251 m_tpc_clust_numclustTPX = 0;
257 m_h1_inv_mass_cluster = 0;
258 m_h1_dgg_cluster = 0;
259 m_h1_two_cluster_energy_allcut = 0;
260 m_h2_cluster_dgg_vs_E1pE2 = 0;
267 for (i=0; i<kRP_MAXSEQ; i++) m_RP_clusters_xy[i] = 0 ;
270 for (i=0; i<10; i++) m_etofHist[i] = 0;
274 StQAMakerBase::~StQAMakerBase() {
275 if (mNullPrimVtx)
delete mNullPrimVtx;
276 if (mMultClass)
delete mMultClass;
277 if (mTrigWord)
delete mTrigWord;
278 if (mTrigBits)
delete mTrigBits;
282 for (Int_t i=0; i<24; i++) {
283 delete mTpcSectorPlot[i];
309 Int_t StQAMakerBase::Init() {
312 return StMaker::Init();
322 gMessMgr->Info(
" In StQAMakerBase::Make()");
324 if (!mNullPrimVtx) BookHist();
329 case (StQA_AuAuOld) :
330 mMultClass->Fill((
float) eventClass);
336 if (!
hists) NewQABookHist();
340 if (!fillHists)
return kStOk;
351 if (!eventClassIdx) MakeHistTPC();
361 if (
histsSet==StQA_MC) MakeHistEval();
363 if (
histsSet==StQA_AuAuOld) MakeHistBBC();
365 if (
histsSet==StQA_AuAuOld) MakeHistFPD();
367 if (
histsSet<StQA_run12all) MakeHistPMD();
369 if (
histsSet>=StQA_run8) MakeHistTOF();
371 if (
histsSet>=StQA_run13 && !eventClassIdx) MakeHistFMS();
373 if (
histsSet>=StQA_run12all) MakeHistMTD();
382 if (
histsSet>=StQA_run15 && !eventClassIdx) MakeHistRP();
393 void StQAMakerBase::NewQABookHist() {
394 const char* pre = prefix[eventClass].Data();
397 "StQAMakerBase: booking histograms with prefix: " <<
399 QAH::maker = (
StMaker*) (
this);
401 histsList.AddAt(
hists,eventClass);
405 TH2F* StQAMakerBase::MH1F(
const Text_t* name,
const Text_t* title,
406 Int_t nbinsx, Axis_t xlow, Axis_t xup) {
407 TH2F* h = QAH::MH1F(name,title,nbinsx,xlow,xup,eventClass);
409 h->Rebin(0,
"low mult");
410 h->Rebin(1,
"mid mult");
411 h->Rebin(2,
"high mult");
416 void StQAMakerBase::BookHist() {
419 Int_t tempClass = eventClass;
422 prefix[0] = QAMakerType;
429 case (StQA_AuAuOld) : {
430 (prefix[0] = QAMakerType) +=
"LM";
431 (prefix[1] = QAMakerType) +=
"MM";
432 (prefix[2] = QAMakerType) +=
"HM";
449 (prefix[0] = QAMakerType) +=
"MB";
450 (prefix[1] = QAMakerType) +=
"CL";
451 (prefix[2] = QAMakerType) +=
"HT";
452 (prefix[3] = QAMakerType) +=
"XX";
453 (prefix[4] = QAMakerType) +=
"JP";
458 prefix[0] = QAMakerType;
459 (prefix[1] = QAMakerType) +=
"HP";
460 (prefix[2] = QAMakerType) +=
"XX";
471 case (StQA_run12all) :
474 prefix[0] = QAMakerType;
480 QAH::maker = (
StMaker*) (
this);
481 QAH::preString = QAMakerType;
488 if (
histsSet>=StQA_run22) BookHistFCS();
490 if (
histsSet>=StQA_run15) BookHistRP();
491 if (
histsSet>=StQA_run19) BookHistETOF();
493 Int_t tempClass2 = eventClass;
495 for (eventClass=0; eventClass<tempClass2; eventClass++) {
496 if (!(QAMakerType.CompareTo(prefix[eventClass]))) {
501 eventClass = tempClass;
505 void StQAMakerBase::BookHistGeneral(){
507 mNullPrimVtx = QAH::H1F(
"QaNullPrimVtx",
"event primary vertex check",40,-2,2);
508 mNullPrimVtx->SetXTitle(
"has primary vertex? (yes = 1, no = -1)");
509 mNullPrimVtx->SetYTitle(
"# of events");
512 mMultClass = QAH::H1F(
"QaMultClass",
"event multiplicity class",5,-0.5,4.5);
513 mMultClass->SetXTitle(
"mult class (0=?/MC, 1=LM, 2=MM, 3=HM)");
514 mMultClass->SetYTitle(
"# of events");
517 m_glb_simpactTime = QAH::H2F(
"QaGtrkSImpactTime",
"globtrk: signed impact param from prim vtx vs. time",
518 18000,0.,3600.,120,-3.0,3.0);
522 void StQAMakerBase::BookHistTrigger(){
524 QAH::maker = (
StMaker*) (
this);
525 QAH::preString = QAMakerType;
526 if (mTrigWord)
return;
527 mTrigWord = QAH::H1F(
"QaTrigWord",
"trigger word",8,0.5,8.5);
528 mTrigWord->SetXTitle(
"1:MinBias 2:Central 3:HiPt 4:Jet 5:HiTower 6:OtherPhys");
529 mTrigBits = QAH::H1F(
"QaTrigBits",
"trigger bits",64,-0.5,63.5);
532 void StQAMakerBase::BookHistDE(){
537 StMaker* fhMaker = GetMaker(
"dEdxY2");
539 m_dedx_Z3A = (TH3F*) (fhMaker->GetHist(
"Z3A"));
548 m_dedx_Z3A = (TH3F*) (fhDS->FindObject(
"Z3A"));
557 void StQAMakerBase::BookHistFcl(){
560 if (!(m_ftpc_chargestepW)) {
562 StMaker* fhMaker = GetMaker(
"ftpc_hits");
564 m_ftpc_chargestepW = (TH1F*) (fhMaker->GetHist(
"fcl_chargestepW"));
565 AddHist(m_ftpc_chargestepW);
581 (TH1F*) (fhDS->FindObject(
"fcl_chargestepW"));
582 AddHist(m_ftpc_chargestepW);
584 (TH1F*) (fhDS->FindObject(
"fcl_chargestepE"));
587 (TH1F*) (fhDS->FindObject(
"fcl_radialW"));
590 (TH1F*) (fhDS->FindObject(
"fcl_radialE"));
598 void StQAMakerBase::BookHistFCS(){
600 if (!(m_h1_inv_mass_cluster)) {
601 StMaker* fhMaker = GetMaker(
"FcsPi0F");
603 m_h1_inv_mass_cluster = (TH1F*) (fhMaker->GetHist(
"h1_inv_mass_cluster"));
604 m_h1_dgg_cluster = (TH1F*) (fhMaker->GetHist(
"h1_dgg_cluster"));
605 m_h1_two_cluster_energy_allcut = (TH1F*) (fhMaker->GetHist(
"h1_two_cluster_energy_allcut"));
606 m_h2_cluster_dgg_vs_E1pE2 = (TH2F*) (fhMaker->GetHist(
"h2_cluster_dgg_vs_E1pE2"));
614 m_h1_inv_mass_cluster = (TH1F*) (fhDS->FindObject(
"h1_inv_mass_cluster"));
615 m_h1_dgg_cluster = (TH1F*) (fhDS->FindObject(
"h1_dgg_cluster"));
616 m_h1_two_cluster_energy_allcut = (TH1F*) (fhDS->FindObject(
"h1_two_cluster_energy_allcut"));
617 m_h2_cluster_dgg_vs_E1pE2 = (TH2F*) (fhDS->FindObject(
"h2_cluster_dgg_vs_E1pE2"));
621 AddHist(m_h1_inv_mass_cluster);
622 AddHist(m_h1_dgg_cluster);
623 AddHist(m_h1_two_cluster_energy_allcut);
624 AddHist(m_h2_cluster_dgg_vs_E1pE2);
629 void StQAMakerBase::BookHistFMS(){
631 for(
int qt = kQt1; qt < kQtError; ++qt) {
655 if(qt >= kQt1 and qt <= kQt4) {
656 std::stringstream stream;
657 stream <<
"fms_qt_channel_adc_crate_" << qt;
661 stream <<
"Input to FMS QT crate " << qt <<
" (" << s <<
")";
662 title = stream.str();
665 else if(kFpd == qt) {
666 name =
"fpd_channel_adc";
667 title =
"Input to FPD QT crate";
671 TH2F* h =
new TH2F(name.c_str(),
673 kNChannels, 0., kNChannels,
675 TH1Helper::SetCanRebin(h);
676 h->SetXTitle(
"slot * 32 + channel");
685 void StQAMakerBase::BookHistRP(){
688 char rpname[kRP_MAXSEQ][5] = {
"E1U",
"E1D",
"E2U",
"E2D",
"W1U",
"W1D",
"W2U",
"W2D" };
690 char strs[20], strl[100];
691 for ( Int_t i=0; i<kRP_MAXSEQ; i++ ) {
692 sprintf(strs,
"RP_cluster_xy_%s", rpname[i] ) ;
693 sprintf(strl,
"Clusters Y vs X in %s", rpname[i] ) ;
694 m_RP_clusters_xy[i] = QAH::H2F(strs, strl, 96, 0., 768., 96, 0., 768. );
699 void StQAMakerBase::BookHistETOF(){
702 if (!(m_etofHist[0])) {
705 StMaker* ehMaker = GetMaker(
"etofHit");
707 m_etofHist[etofCnt++] = (TH1*) (ehMaker->GetHist(
"etofHit_tof"));
708 m_etofHist[etofCnt++] = (TH1*) (ehMaker->GetHist(
"averageTimeDiff_etofHits_btofHits"));
709 m_etofHist[etofCnt++] = (TH1*) (ehMaker->GetHist(
"multiplicity_etofHits_btofHits"));
710 m_etofHist[etofCnt++] = (TH1*) (ehMaker->GetHist(
"multiplicity_etofHits_epdEast"));
713 StMaker* emMaker = GetMaker(
"etofMatch");
715 m_etofHist[etofCnt++] = (TH1*) (emMaker->GetHist(
"A_eTofHits_globalXY"));
716 m_etofHist[etofCnt++] = (TH1*) (emMaker->GetHist(
"B_intersectionMult_etofMult"));
717 m_etofHist[etofCnt++] = (TH1*) (emMaker->GetHist(
"G_matchCand_beta_signmom"));
718 m_etofHist[etofCnt++] = (TH1*) (emMaker->GetHist(
"G_matchCand_timeOfFlight_pathLength"));
719 m_etofHist[etofCnt++] = (TH1*) (emMaker->GetHist(
"G_primary_Intersection_validMatch"));
720 m_etofHist[etofCnt++] = (TH1*) (emMaker->GetHist(
"H_matchCand_t0corr_1d"));
722 for (
int i=0; i<etofCnt; i++) AddHist(m_etofHist[i]);
726 void StQAMakerBase::BookHistTPC(){
728 for (
int i = 0; i < 24; ++ i) {
729 int num_rows = St_tpcPadConfigC::instance()->numberOfRows(i+1);
730 mTpcSectorPlot[i] = QAH::H2F(Form(
"Qa%sTpcSector%d",(num_rows > 45 ?
"i" :
""),i+1),
731 Form(
"Hits in %sTPC Sector %d",(num_rows > 45 ?
"i" :
""),i+1),
732 104,-52.,52.,num_rows+2,-0.5,((
float) num_rows)+1.5);
733 mTpcSectorPlot[i]->SetXTitle(
"along padrows [cm]");
734 mTpcSectorPlot[i]->SetYTitle(
"padrow");
736 m_pnt_rpTQW = QAH::H2F(
"QaPointRPTpcQW",
"point: r-phi distribution of charge, tpcW",20,58.75,196.75,72,0,TMath::TwoPi());
737 m_pnt_rpTQE = QAH::H2F(
"QaPointRPTpcQE",
"point: r-phi distribution of charge, tpcE",20,58.75,196.75,72,0,TMath::TwoPi());
739 for (
int i = 0; i < 24; ++ i) {
740 int num_rows = St_tpcPadConfigC::instance()->numberOfRows(i+1);
741 int max_pads_per_row = St_tpcPadConfigC::instance()->numberOfPadsAtRow(i+1,num_rows);
742 m_tpc_adc_chargevstb[i] = QAH::H1F(Form(
"QaTpc_adc_chargevstb_%d",i+1),Form(
"ADC charge vs. time bucket (iTPC), sector %d",i+1),512,0,511);
743 m_tpc_adc_chargevstbTPX[i] = QAH::H1F(Form(
"QaTpc_adc_chargevstbTPX_%d",i+1),Form(
"ADC charge vs. time bucket (TPX), sector %d",i+1),512,0,511);
744 m_tpc_adc_chargevsrowvstb[i] = QAH::H2F(Form(
"QaTpc_adc_chargevsrowvstb_%d",i+1),Form(
"charge vs. row vs. time bucket, sector %d",i+1),400,0.5,0.5+400,72,0.5,72+0.5);
745 m_tpc_adc_chargesum[i] = QAH::H2F(Form(
"QaTpc_adc_chargesum_%d",i+1),Form(
"ADC sum over all events, sector %d",i+1),max_pads_per_row,0.5,max_pads_per_row+0.5,num_rows,0.5,num_rows+0.5);
747 m_tpc_clust_stats[i] = QAH::H1F(Form(
"QaTpc_clust_stats_%d",i+1),Form(
"status of clusters, sector %d",i+1),32,-0.5,31.5);
748 m_tpc_clust_statsvsrow[i] = QAH::H2F(Form(
"QaTpc_clust_statsvsrow_%d",i+1),Form(
"status of clusters vs. row, sector %d",i+1),72,0.5,72+0.5, 32,-0.5,31.5);
749 m_tpc_clust_charge[i] = QAH::H1F(Form(
"QaTpc_clust_charge_%d",i+1),Form(
"charge per cluster (iTPC), sector %d",i+1),1024,0,8096);
750 m_tpc_clust_chargeTPX[i] = QAH::H1F(Form(
"QaTpc_clust_chargeTPX_%d",i+1),Form(
"charge per cluster (TPX), sector %d",i+1),2048,0,2048);
751 m_tpc_clust_chargesum[i] = QAH::H2F(Form(
"QaTpc_clust_chargesum_%d",i+1),Form(
"cluster sum over all events, sector %d",i+1),max_pads_per_row,0.5,max_pads_per_row+0.5,num_rows,0.5,num_rows+0.5);
752 m_tpc_clust_chargevstb[i] = QAH::H2F(Form(
"QaTpc_clust_chargevstb_%d",i+1),Form(
"charge vs. time bucket (iTPC), sector %d",i+1),128,0.5,512+0.5,64,0.5,0.5+2048);
753 m_tpc_clust_chargevstbTPX[i] = QAH::H2F(Form(
"QaTpc_clust_chargevstbTPX_%d",i+1),Form(
"charge vs. time bucket (TPX), sector %d",i+1),128,0.5,512+0.5,64,0.5,0.5+2048);
754 m_tpc_clust_chargevsrow[i] = QAH::H2F(Form(
"QaTpc_clust_chargevsrow_%d",i+1),Form(
"charge vs. row, sector %d",i+1),72,0.5,72+0.5,128,0.5,0.5+2048);
760 m_tpc_clust_pxltb = QAH::H2F(
"QaTpc_clust_pxltb",
"cluster pixel time bucket size (iTPC)",24,0.5,24.5,100,0,100);
761 m_tpc_clust_pxltbTPX = QAH::H2F(
"QaTpc_clust_pxltbTPX",
"cluster pixel time bucket size (TPX)",24,0.5,24.5,100,0,100);
762 m_tpc_clust_pxlp = QAH::H2F(
"QaTpc_clust_pxlp",
"cluster pixel pad size (iTPC)",24,0.5,24.5,100,0,100);
763 m_tpc_clust_pxlpTPX = QAH::H2F(
"QaTpc_clust_pxlpTPX",
"cluster pixel pad size (TPX)",24,0.5,24.5,100,0,100);
764 m_tpc_clust_numclust = QAH::H2F(
"QaTpc_clust_numclust",
"number of clusters vs. sector (iTPC)",24,0.5,24.5,120,0,6);
765 m_tpc_clust_numclustTPX = QAH::H2F(
"QaTpc_clust_numclustTPX",
"number of clusters vs. sector (TPX)",24,0.5,24.5,120,0,6);
Int_t histsSet
event class-dependent histograms
virtual void Clear(Option_t *)
User defined functions.
TH2F * m_tpc_adc_numhitsvsrowvssector
charge per sector (TPX)
TH2F * m_tpc_clust_numclust
cluster pixel pad size (outer)
TH1F * m_ftpc_fcl_radialW
Chargestep from ftpc east.
virtual void Clear(Option_t *option="")
User defined functions.
TH2F * m_tpc_clust_statsvsrow[24]
status of clusters
TH1PtrMap mFMShistograms
signed impact parameter from primary vertex vs. time
TH2F * m_tpc_clust_pxltb
adc hits vs row vs sector
TH2F * m_tpc_clust_chargevstb[24]
cluster sum over all events
TH1F * m_tpc_clust_chargeTPX[24]
charge per cluster (inner)
TH2F * m_tpc_clust_chargevstbTPX[24]
charge vs. time bucket (inner)
TH1F * m_ftpc_chargestepE
Chargestep from ftpc west.
TH1F * m_ftpc_fcl_radialE
ftpc west cluster radial position
TH3F * m_dedx_Z3A
number of clusters vs. sector (outer)
TH2F * m_tpc_adc_chargevsrowvstb[24]
ADC charge vs. time bucket (outer)
TH2F * m_tpc_clust_pxlp
cluster pixel time bucket size (outer)
StQABookHist * hists
pointers to the histogram classes for the
TH2F * m_tpc_clust_pxltbTPX
cluster pixel time bucket size (inner)
TH2F * m_tpc_clust_chargevsrow[24]
charge vs. time bucket (outer)
TH2F * m_tpc_clust_chargesum[24]
charge per cluster (outer)
TH2F * m_tpc_clust_numclustTPX
number of clusters vs. sector (inner)
TH1F * m_tpc_clust_charge[24]
status of clusters vs. row
TH1F * m_tpc_adc_chargepersectorTPX
charge per sector
TH1F * m_tpc_adc_chargepersector
charge vs. row
TH1F * m_tpc_adc_chargevstbTPX[24]
ADC charge vs. time bucket (inner)
TH2F * m_tpc_adc_chargesum[24]
charge vs. row vs. time bucket
TH1F * m_tpc_adc_chargevstb[24]
ftpc east cluster radial position
TH2F * m_tpc_clust_pxlpTPX
cluster pixel pad size (inner)
TH1F * m_tpc_clust_stats[24]
ADC sum over all events.
virtual TDataSet * Find(const char *path) const