diff --git a/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx b/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx index 6e8b1b33ef9..a22ada155c5 100644 --- a/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx +++ b/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx @@ -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 ; @@ -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); - } diff --git a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx index 5a736a19120..abeeeb59a01 100644 --- a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx +++ b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx @@ -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; idnorthSouth(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; }; @@ -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) { @@ -121,21 +133,20 @@ Int_t StFcsEpdQaMaker::Make(){ StSPtrVecFcsHit& hits = mFcsCollection->hits(det); for (int i=0; iid(); - 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); @@ -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); } } } diff --git a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h index a5f4d48202a..c8b17404ec9 100644 --- a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h +++ b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h @@ -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); }; diff --git a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx index b84b2f6a04e..a39309a6be1 100644 --- a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx +++ b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx @@ -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" @@ -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; }; @@ -133,7 +135,9 @@ Int_t StFcsTrgQaMaker::Make() { } //Getting StEvent and FcsCollection - StEvent* event= (StEvent*)GetInputDS("StEvent"); + StEvent* event=0; + event = static_cast(GetInputDS("StEvent")); + StFcsCollection *fcs = 0; if(!event) { LOG_INFO << "No StEvent found" << endm; diff --git a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h index 7ead1958a63..9d0905a9d6b 100644 --- a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h +++ b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h @@ -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; @@ -90,7 +88,7 @@ class StFcsTrgQaMaker : public StMaker { TH1F* mTcuDep; TH1F* mSimDep; - TH2F* mAdc[3]; + TH2F* mAdc[6]; ClassDef(StFcsTrgQaMaker,1); }; diff --git a/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx b/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx index 1056652fc22..f27623d5acf 100644 --- a/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx +++ b/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx @@ -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; @@ -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); @@ -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]); @@ -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)<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(){ @@ -716,3 +784,19 @@ template 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 "<