Skip to content

Commit

Permalink
StSpinPool FCS trigger simulator and QA Update for run24 (star-bnl#684)
Browse files Browse the repository at this point in the history
StSpinPool FCS trigger simulator and QA Update for run24

---------

Co-authored-by: Akio Ogawa <akio@onl04.starp.bnl.gov>
  • Loading branch information
akioogawa and Akio Ogawa committed May 23, 2024
1 parent 10e7cee commit 2fcaba4
Show file tree
Hide file tree
Showing 7 changed files with 169 additions and 60 deletions.
3 changes: 1 addition & 2 deletions StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ int fcs_trg_base::end_event()

verify_event_io() ; // verify interconnectivity

int dsmout = 0;
//int dsmout = 0; moved to .h file

self_trigger = 0 ;

Expand Down Expand Up @@ -1274,7 +1274,6 @@ u_int fcs_trg_base::run_event_sim(int xing, int type)
return d_out.s3.dsm_out
+ ((int)(d_out.s2[0].s2_to_dsm & 0xFF) << 16)
+ ((int)(d_out.s2[1].s2_to_dsm & 0xFF) << 24);

}


Expand Down
67 changes: 41 additions & 26 deletions StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -38,26 +38,37 @@ Int_t StFcsEpdQaMaker::Init(){
return kStFatal;
}

if(mFilename[0]==0 && mRun>0){
if(mFilename[0]=='0' && mRun>0){
int yday=mRun/1000;
sprintf(mFilename,"%d/%d.epdqa.root",yday,mRun);
printf("StFcsEpdQaMaker::Init - Opening %s\n",mFilename);
}
mFile=new TFile(mFilename,"RECREATE");

char t[100], tt[100];
for(int i=0; i<16; i++){
sprintf(t,"QtDepAdcCh%d",i);
sprintf(tt,"Dep01Ch%d-PP10TT%d; QTADC; DEP Fit Integral",i,i*2);
mQtDepA[i] = new TH2F(t,tt,256,0,1024,256,0,1024*4);
sprintf(t,"QtDepTacCh%d",i);
sprintf(tt,"Dep01Ch%d-PP10TT%d; QTTAC; DEP Peak Timebin",i,i*2);
mQtDepT[i] = new TH2F(t,tt,100,0,3000,100,45,56);
sprintf(t,"QtDepRatCh%d",i);
sprintf(tt,"Dep01Ch%d-PP10TT%d; DEP Peak Timebin; QTADC/DEPIntg;",i,i*2);
mQtDepR[i] = new TH2F(t,tt,100,44,57,100,0.0,0.8);
}

char t[100], n[100];
char *cNS[2]={"N","S"};
for(int det=kFcsPresNorthDetId; det<=kFcsPresSouthDetId; det++){
for(int id=0; id<kFcsPresMaxId; id++){
char name[100];
int ns= mFcsDb->northSouth(det);
mFcsDb->getName(det,id,name);
sprintf(t,"EPDADC_%1s%03d",cNS[ns],id);
sprintf(n,"%s; QTADC; DEP Fit Integral",name);
mQtDepA[ns][id] = new TH2F(t,n,64,0,1024,64,0,1024*4);
sprintf(t,"EPDTAC_%1s%03d",cNS[ns],id);
sprintf(n,"%s; QTTAC; DEP Fit Peak Timebin",name);
mQtDepT[ns][id] = new TH2F(t,n,50,0,3000,50,45,56);
sprintf(t,"EPDRatio_%1s%03d",cNS[ns],id);
sprintf(n,"%s; DEP Peak Timebin; QTADC/DEPIntg",name);
mQtDepR[ns][id] = new TH2F(t,n,50,44,57,50,0.0,0.8);
}
}
mQtDepA[0][kFcsPresMaxId] = new TH2F("EPDADCc","EPDADC QTc; QTc ADC; DEP Fit Integral",64,0,1024,64,0,1024*4);
mQtDepT[0][kFcsPresMaxId] = new TH2F("EPDTACc","EPDTAC QTc; QTc TAC; DEP Fit Peak Timebin",50,0,3000,50,45,56);
mQtDepR[0][kFcsPresMaxId] = new TH2F("EPDRatioc","EPDRatio QTc; DEP Peak Timebin; QTcADC/DEPIntg",50,44,57,50,0.0,0.8);
mQtDepA[1][kFcsPresMaxId] = new TH2F("EPDADCbmqtad","EPDADC QTb; QTb ADC; DEP Fit Integral",64,0,1024,64,0,1024*4);
mQtDepT[1][kFcsPresMaxId] = new TH2F("EPDTACb","EPDTAC QTb; QTb TAC; DEP Fit Peak Timebin",50,0,3000,50,45,56);
mQtDepR[1][kFcsPresMaxId] = new TH2F("EPDRatiob","EPDRatio QTb; DEP Peak Timebin; QTbADC/DEPIntg",50,44,57,50,0.0,0.8);
return kStOK;
};

Expand Down Expand Up @@ -95,8 +106,9 @@ Int_t StFcsEpdQaMaker::Make(){
//unsigned short lastdsm4 = trg->lastDSM(4);
//unsigned short fcs2019 = (lastdsm4 >> 10) & 0x1;
//printf("fcs2019=%1d\n",fcs2019);
unsigned short lastdsm2 = trg->lastDSM(2);
unsigned short lastdsm5 = trg->lastDSM(5);
printf("lastdsm5=%04x tofmult=%d\n",lastdsm5,tofmult);
printf("lastdsm2=%04x lastdsm5=%04x tofmult=%d\n",lastdsm2,lastdsm5,tofmult);
}

if(!event) {
Expand All @@ -121,21 +133,20 @@ Int_t StFcsEpdQaMaker::Make(){
StSPtrVecFcsHit& hits = mFcsCollection->hits(det);
for (int i=0; i<nhit; i++){
int id = hits[i]->id();
int ehp = hits[i]->ehp();
//int ehp = hits[i]->ehp();
int ns = hits[i]->ns();
int dep = hits[i]->dep();
int ch = hits[i]->channel();
int ntb = hits[i]->nTimeBin();
//int ntb = hits[i]->nTimeBin();
int pp,tt;
mFcsDb->getEPDfromId(det,id,pp,tt);
if(pp==11) pp=10; //HACK for run21 map
if(pp!=10 || ch>=16 || ch<0) continue;
int QTcQRb = tt<=9?0:1;

//from fits
float fititeg=0;
float fitpeak=0;
fititeg = hits[i]->adcSum();
fitpeak = hits[i]->fitPeak();
fitpeak = hits[i]->fitPeak();
// printf("Dep=%02d Ch=%02d PP=%02d TT=%02d DEP=%6d PEAK=%f",
// dep,ch,pp,tt,fititeg,fitpeak);

Expand All @@ -153,12 +164,16 @@ Int_t StFcsEpdQaMaker::Make(){
break;
}
}
printf(" Dep=%02d Ch=%02d PP=%02d TT=%02d QT=%4d DEP=%6.1f TAC=%4d PEAK=%4.2f\n",
dep,ch,pp,tt,adc,fititeg,tac,fitpeak);
mQtDepA[ch]->Fill(adc,fititeg);
mQtDepT[ch]->Fill(tac,fitpeak);
if(fititeg>100){
mQtDepR[ch]->Fill(fitpeak,float(adc)/fititeg);
if(Debug()) printf(" Dep=%02d Ch=%02d PP=%02d TT=%02d QT=%4d DEP=%6.1f TAC=%4d PEAK=%4.2f\n",
dep,ch,pp,tt,adc,fititeg,tac,fitpeak);

mQtDepA[ns][id]->Fill(adc,fititeg);
mQtDepA[QTcQRb][kFcsPresMaxId]->Fill(adc,fititeg);
if(fititeg>100) {
mQtDepT[ns][id]->Fill(tac,fitpeak);
mQtDepT[QTcQRb][kFcsPresMaxId]->Fill(tac,fitpeak);
mQtDepR[ns][id]->Fill(fitpeak,float(adc)/fititeg);
mQtDepR[QTcQRb][kFcsPresMaxId]->Fill(fitpeak,float(adc)/fititeg);
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ class StFcsEpdQaMaker : public StMaker {
int mRun=0;
TFile* mFile;
char mFilename[100];

TH2F* mQtDepA[15];
TH2F* mQtDepT[15];
TH2F* mQtDepR[15];
TH2F* mQtDepA[kFcsNorthSouth][kFcsPresMaxId+1];
TH2F* mQtDepT[kFcsNorthSouth][kFcsPresMaxId+1];
TH2F* mQtDepR[kFcsNorthSouth][kFcsPresMaxId+1];

ClassDef(StFcsEpdQaMaker,1);
};
Expand Down
26 changes: 15 additions & 11 deletions StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@

#include "StFcsTrgQaMaker.h"

#include "StRoot/StEvent/StEvent.h"
#include "StRoot/St_base/StMessMgr.h"
#include "StRoot/StEvent/StTriggerData.h"
#include "StRoot/StEvent/StFcsCollection.h"
#include "StRoot/StEvent/StFcsHit.h"
#include "StRoot/StEvent/StFcsCluster.h"
#include "StRoot/StFcsDbMaker/StFcsDb.h"
#include "StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.h"

#include "StRoot/RTS/src/TRG_FCS/fcs_trg_base.h"
#include "StMessMgr.h"
//#include "Stypes.h"
#include "StEvent/StEventTypes.h"
#include "StEvent/StTriggerData.h"
#include "StEvent/StFcsCollection.h"
#include "StEvent/StFcsHit.h"
#include "StEvent/StFcsCluster.h"
#include "StFcsDbMaker/StFcsDb.h"
#include "StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.h"

#include "RTS/src/TRG_FCS/fcs_trg_base.h"

#include "TH1F.h"
#include "TH2F.h"
Expand Down Expand Up @@ -122,6 +123,7 @@ Int_t StFcsTrgQaMaker::Init(){
mAdc[3]=new TH2F("HS_Id_Adc","HcalSouth; Id; ADC",mFcsDb->maxId(3),0.0,mFcsDb->maxId(3),500,0.0,maxadc);
mAdc[4]=new TH2F("PN_Id_Adc","PresNorth; Id; ADC",mFcsDb->maxId(4),0.0,mFcsDb->maxId(4),500,0.0,maxadc);
mAdc[5]=new TH2F("PS_Id_Adc","PresSouth; Id; ADC",mFcsDb->maxId(5),0.0,mFcsDb->maxId(5),500,0.0,maxadc);

return kStOK;
};

Expand All @@ -133,7 +135,9 @@ Int_t StFcsTrgQaMaker::Make() {
}

//Getting StEvent and FcsCollection
StEvent* event= (StEvent*)GetInputDS("StEvent");
StEvent* event=0;
event = static_cast<StEvent*>(GetInputDS("StEvent"));

StFcsCollection *fcs = 0;
if(!event) {
LOG_INFO << "No StEvent found" << endm;
Expand Down
4 changes: 1 addition & 3 deletions StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
#ifndef STAR_StFcsTrgQaMaker_HH
#define STAR_StFcsTrgQaMaker_HH

#include "StRoot/St_base/Stypes.h"
#include "StRoot/StEvent/StEnumerations.h"
#include "StMaker.h"

class StFcsDb;
Expand Down Expand Up @@ -90,7 +88,7 @@ class StFcsTrgQaMaker : public StMaker {
TH1F* mTcuDep;
TH1F* mSimDep;

TH2F* mAdc[3];
TH2F* mAdc[6];

ClassDef(StFcsTrgQaMaker,1);
};
Expand Down
106 changes: 95 additions & 11 deletions StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@

namespace {
enum {kMaxNS=2, kMaxDet=3, kMaxDep=24, kMaxCh=32, kMaxEcalDep=24, kMaxHcalDep=8, kMaxPresDep=4, kMaxLink2=2};
uint32_t fcs_trg_sim_adc[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ;
float fcs_trg_pt_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh];
float fcs_trg_gain_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh];
uint32_t fcs_trg_sim_adc[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ;
float fcs_trg_pt_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh];
float fcs_trg_gain_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh];
uint16_t fcs_trg_pedestal[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ;

static const int mNTRG=21;
Expand Down Expand Up @@ -152,6 +152,9 @@ int StFcsTriggerSimMaker::Init(){
//mTrgSim->EM_HERATIO_THR = 32;
//mTrgSim->HAD_HERATIO_THR = 32;

//Trigger Id names
readTrgId();

//EPD mask
if(mPresMask){
printf("Reading PresMask from %s\n",mPresMask);
Expand Down Expand Up @@ -234,11 +237,11 @@ int StFcsTriggerSimMaker::InitRun(int runNumber){

/*
printf("AAAGAIN %1d %1d %2d %2d pT=%6.3f corr=%6.3f ped=%4d\n",ns,ehp,dep,ch,
fcs_trg_pt_correction[ns][ehp][dep][ch],
fcs_trg_gain_correction[ns][ehp][dep][ch],
fcs_trg_pedestal[ns][ehp][dep][ch]);
*/
fcs_trg_pt_correction[ns][ehp][dep][ch],
fcs_trg_gain_correction[ns][ehp][dep][ch],
fcs_trg_pedestal[ns][ehp][dep][ch]);
*/
if(gainfile)
fprintf(gainfile,"%2d %2d %2d %2d %8.3f\n",ns,ehp,dep,ch,
fcs_trg_pt_correction[ns][ehp][dep][ch]);
Expand Down Expand Up @@ -349,6 +352,7 @@ int StFcsTriggerSimMaker::Make(){
//Run Trigger Simulation
// uint16_t dsm_out = fcs_trg_run(mTrgSelect, mDebug);
uint32_t dsm_out = mTrgSim->end_event();
LOG_INFO << Form("AAA dsmout=%08x",dsm_out)<<endm;

//QA Tree
mFlt=0;
Expand Down Expand Up @@ -412,9 +416,73 @@ int StFcsTriggerSimMaker::Make(){
return kStOK;
}

void StFcsTriggerSimMaker::runStage2(link_t ecal[], link_t hcal[], link_t pres[], geom_t& geo, link_t output[]){
uint16_t s2_to_dsm;
mTrgSim->stage_2(ecal,hcal,pres,geo,output,&s2_to_dsm);
void StFcsTriggerSimMaker::runStage2(link_t ecal[], link_t hcal[], link_t pres[], geom_t& geo, link_t output[], unsigned short& dsm,
int dta[], int dsmout, int sim[], int simdsmout, int iev){
unsigned short emu[8];
mTrgSim->stage_2(ecal,hcal,pres,geo,output,&dsm);
for(int i=0; i<8; i++) emu[i] = output[0].d[i] + (output[1].d[i] << 8);
printf("Event#=%3d emuout = ",iev); for(int i=0; i<8; i++) {printf("%04x ",emu[i]);}
printf("TCU=%04x\n",dsm);
printf("Event#=%3d dtaout = ",iev); for(int i=0; i<8; i++) {printf("%04x ",dta[i]);}
printf("TCU=%04x\n",dsmout);
printf("Event#=%3d simout = ",iev); for(int i=0; i<8; i++) {printf("%04x ",sim[i]);}
printf("TCU=%04x\n",simdsmout);
const char* s2bit[3][16]={{"EM0 ","EM1 ","EM2 ","EM3 ","ELE0","ELE1","ELE2","PRS ",
"HAD0","HAD1","HAD2","xxxx","EHT ","HHT ","ETOT","HTOT"},
{"JPA2","JPB2","JPC2","JPD2","JPE2","xxxx","xxxx","xxxx",
"JPA1","JPB1","JPC1","JPD1","JPE1","xxxx","xxxx","xxxx"},
{"JPA0","JPB0","JPC0","JPD0","JPE0","xxxx","xxxx","xxxx",
"JPAd","JPBd","JPCd","JPDd","JPEd","xxxx","xxxx","xxxx"}};
for(int i=0; i<3; i++){
for(int j=0; j<16; j++){
if( ((dta[i]>>j)&1) != ((sim[i]>>j)&1) ||
((sim[i]>>j)&1) != ((emu[i]>>j)&1) ||
((emu[i]>>j)&1) != ((dta[i]>>j)&1) ){
printf("Event#=%3d STG2to3 ns=%1d i=%d j=%2d %s dat=%x sim=%x emu=%x",
iev,geo.ns,i,j,s2bit[i][j],(dta[i]>>j)&1,(sim[i]>>j)&1,(emu[i]>>j)&1);
if(i==0 && j<7){
int maxr=0, maxc=0, max=0;
for(int r=0; r<15; r++){
for(int c=0; c<9; c++){
if(max < mTrgSim->esum[geo.ns][r][c]) {maxr=r; maxc=c; max=mTrgSim->esum[geo.ns][r][c];}
}
}
printf(" EsumMax=%4d ratio=%4.3f",
mTrgSim->esum[geo.ns][maxr][maxc],
mTrgSim->ratiomax[geo.ns][maxr][maxc]);
if(j>=4) printf(" Epd=%1d",mTrgSim->epdcoin[geo.ns][maxr][maxc]);
if(j==0) printf(" EMTHR0=%4d",mTrgSim->EMTHR0);
if(j==1) printf(" EMTHR1=%4d",mTrgSim->EMTHR1);
if(j==2) printf(" EMTHR2=%4d",mTrgSim->EMTHR2);
if(j==3) printf(" ELETHR2=%4d",mTrgSim->ELETHR2);
if(j==4) printf(" ELETHR0=%4d",mTrgSim->ELETHR0);
if(j==5) printf(" ELETHR1=%4d",mTrgSim->ELETHR1);
if(j==6) printf(" ELETHR2=%4d",mTrgSim->ELETHR2);
}
if(i==1 && j== 0){ printf(" JPA=%4d thr2=%4d",mTrgSim->jet[geo.ns][0],mTrgSim->JPATHR2);}
if(i==1 && j== 1){ printf(" JPB=%4d thr2=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHR2);}
if(i==1 && j== 2){ printf(" JPC=%4d thr2=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHR2);}
if(i==1 && j== 3){ printf(" JPD=%4d thr2=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHR2);}
if(i==1 && j== 4){ printf(" JPE=%4d thr2=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHR2);}
if(i==1 && j== 8){ printf(" JPA=%4d thr1=%4d",mTrgSim->jet[geo.ns][0],mTrgSim->JPATHR1);}
if(i==1 && j== 9){ printf(" JPB=%4d thr1=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHR1);}
if(i==1 && j==10){ printf(" JPC=%4d thr1=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHR1);}
if(i==1 && j==11){ printf(" JPD=%4d thr1=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHR1);}
if(i==1 && j==12){ printf(" JPE=%4d thr1=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHR1);}
if(i==2 && j== 0){ printf(" JPA=%4d thr0=%4d",mTrgSim->jet[geo.ns][0],mTrgSim->JPATHR0);}
if(i==2 && j== 1){ printf(" JPB=%4d thr0=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHR0);}
if(i==2 && j== 2){ printf(" JPC=%4d thr0=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHR0);}
if(i==2 && j== 3){ printf(" JPD=%4d thr0=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHR0);}
if(i==2 && j== 4){ printf(" JPE=%4d thr0=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHR0);}
if(i==2 && j== 8){ printf(" JPA=%4d thrD=%4d",mTrgSim->jet[geo.ns][0],-1);}
if(i==2 && j== 9){ printf(" JPB=%4d thrD=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHRD);}
if(i==2 && j==10){ printf(" JPC=%4d thrD=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHRD);}
if(i==2 && j==11){ printf(" JPD=%4d thrD=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHRD);}
if(i==2 && j==12){ printf(" JPE=%4d thrD=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHRD);}
printf("\n");
}
}
}
}

void StFcsTriggerSimMaker::print4B4(){
Expand Down Expand Up @@ -716,3 +784,19 @@ template<typename T> void StFcsTriggerSimMaker::feedADC(T* hit, int ns, int ehp,
if(mFile) fprintf(mFile,"%2d %2d %2d %2d %5d\n",ns,ehp,dep,ch,hit->adc(0));

}

void StFcsTriggerSimMaker::readTrgId(){
int i;
char trgn[200];
if(mTrgIdFile){
LOG_INFO<<"Reading "<<mTrgIdFile<<endm;
FILE* fp=fopen(mTrgIdFile,"r");
if(!fp) {LOG_WARN << "Cannot open "<<mTrgIdFile<<endm; return;}
while(!feof(fp)) {
fscanf(fp,"%d %s",&i,trgn);
mTrgIdName[i]=trgn;
LOG_INFO << "TRGID "<<i<<"="<<mTrgIdName[i].Data()<<endm;
}
fclose(fp);
}
}
Loading

0 comments on commit 2fcaba4

Please sign in to comment.