34 #include "StFcsTriggerSimMaker.h"
39 #include "StMessMgr.h"
41 #include "StarGenerator/BASE/StarPrimaryMaker.h"
42 #include "StarGenerator/EVENT/StarGenEvent.h"
44 #include "StThreeVectorF.hh"
45 #include "StEvent/StEventTypes.h"
46 #include "StEvent/StFcsHit.h"
47 #include "StFcsDbMaker/StFcsDb.h"
49 #include "RTS/include/rtsLog.h"
51 #include "StRoot/RTS/src/TRG_FCS/fcs_trg_base.h"
55 #include "StMuDSTMaker/COMMON/StMuDst.h"
56 #include "StMuDSTMaker/COMMON/StMuEvent.h"
57 #include "StMuDSTMaker/COMMON/StMuFcsCollection.h"
58 #include "StMuDSTMaker/COMMON/StMuFcsHit.h"
59 #include "StMuDSTMaker/COMMON/StMuTypes.hh"
60 #include "StMuDSTMaker/COMMON/StMuEvent.h"
61 #include "StMuDSTMaker/COMMON/StMuFcsCollection.h"
64 enum {kMaxNS=2, kMaxDet=3, kMaxDep=24, kMaxCh=32, kMaxEcalDep=24, kMaxHcalDep=8, kMaxPresDep=4, kMaxLink2=2};
65 uint32_t fcs_trg_sim_adc[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ;
66 float fcs_trg_pt_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh];
67 float fcs_trg_gain_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh];
68 uint16_t fcs_trg_pedestal[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ;
70 static const int mNTRG=21;
71 static const char* ctrg[mNTRG]={
"JP2",
"JPA1",
"JPA0",
"JPBC1",
"JPBC0",
"JPDE1",
"JPDE0",
73 "DY",
"JPsi",
"DYNoEpd",
"DYAsy",
82 StFcsTriggerSimMaker::StFcsTriggerSimMaker(
const char* name):
StMaker(name) {}
84 StFcsTriggerSimMaker::~StFcsTriggerSimMaker(){}
86 int StFcsTriggerSimMaker::Init(){
87 LOG_INFO <<
"StFcsTriggerSimMaker::Init" << endm;
89 mFcsDb=
static_cast<StFcsDb*
>(GetDataSet(
"fcsDb"));
91 LOG_ERROR <<
"StFcsTriggerSimMaker::Init Failed to get StFcsDb" << endm;
95 rtsLogOutput(RTS_LOG_STDERR) ;
100 mTrgSim->run_start(0);
101 mTrgSim->fcs_trgDebug=mDebug;
104 if(mTrgSelect==201900){
105 mTrgSim->stage_version[0]=0;
106 mTrgSim->stage_version[1]=0;
107 mTrgSim->stage_version[2]=0;
108 mTrgSim->stage_version[3]=0;
109 }
else if(mTrgSelect==202201){
110 mTrgSim->stage_version[0]=0;
111 mTrgSim->stage_version[1]=1;
112 mTrgSim->stage_version[2]=1;
113 mTrgSim->stage_version[3]=1;
114 }
else if(mTrgSelect==202203){
115 mTrgSim->stage_version[0]=2;
116 mTrgSim->stage_version[1]=1;
117 mTrgSim->stage_version[2]=3;
118 mTrgSim->stage_version[3]=3;
119 }
else if(mTrgSelect==202204){
120 mTrgSim->stage_version[0]=2;
121 mTrgSim->stage_version[1]=1;
122 mTrgSim->stage_version[2]=4;
123 mTrgSim->stage_version[3]=3;
124 }
else if(mTrgSelect==202205){
125 mTrgSim->stage_version[0]=2;
126 mTrgSim->stage_version[1]=1;
127 mTrgSim->stage_version[2]=5;
128 mTrgSim->stage_version[3]=3;
129 }
else if(mTrgSelect==202206){
130 mTrgSim->stage_version[0]=2;
131 mTrgSim->stage_version[1]=1;
132 mTrgSim->stage_version[2]=6;
133 mTrgSim->stage_version[3]=3;
134 }
else if(mTrgSelect==202207){
135 mTrgSim->stage_version[0]=2;
136 mTrgSim->stage_version[1]=1;
137 mTrgSim->stage_version[2]=7;
138 mTrgSim->stage_version[3]=7;
139 }
else if(mTrgSelect==202209){
140 mTrgSim->stage_version[0]=3;
141 mTrgSim->stage_version[1]=1;
142 mTrgSim->stage_version[2]=7;
143 mTrgSim->stage_version[3]=7;
149 }
else if(mThresholdDb){
157 printf(
"Reading PresMask from %s\n",mPresMask);
158 FILE* F=fopen(mPresMask,
"r");
160 printf(
"Cannot open %s\n",mPresMask);
164 while(fgets(line,
sizeof(line),F)){
169 sscanf(line,
"%d %d %x %x %x %x %x %x",&r,&c,&m[0],&m[1],&m[2],&m[3],&m[4],&m[5]);
170 printf(
"%2d %1d %08x %08x %08x %08x %08x %08x\n",r,c,m[0],m[1],m[2],m[3],m[4],m[5]);
171 for(
int i=0; i<6; i++) mTrgSim->PRES_MASK[r-1][c-1][i]=m[i];
173 mTrgSim->fcs_readPresMaskFromText=1;
177 memset(NTRG,0,
sizeof(NTRG));
181 int StFcsTriggerSimMaker::InitRun(
int runNumber){
182 LOG_INFO <<
"StFcsTriggerSimMaker::InitRun" << endm;
191 mQaTreeFile=
new TFile(mQaTreeFilename,
"RECREATE");
192 mTree =
new TTree(
"trgsim",
"trigger sim QA");
193 mTree->Branch(
"flt",&mFlt,
"flt/I");
194 mTree->Branch(
"trg",&mTrg,
"trg/I");
197 mQaHistFile=
new TFile(mQaHistFilename,
"RECREATE");
198 mTrgRate =
new TH1F(
"FcsTrgRate",
"FcsTrgRate",mNTRG+1,0,mNTRG+1);
205 mFile = fopen(mFilename,
"w");
206 gainfile=fopen(
"fcs_et_gain.txt",
"w");
207 gainfile2=fopen(
"fcs_et_gain2.txt",
"w");
211 for(
int det=0; det<=kFcsNDet; det++){
212 int nid=mFcsDb->
maxId(det);
213 for(
int id=0;
id<nid;
id++){
214 int ehp,ns,crt,sub,dep,ch;
217 fcs_trg_pt_correction[ns][ehp][dep][ch] = mFcsDb->getEtGain(det,
id,mEtFactor);
220 fcs_trg_pt_correction[ns][ehp][dep][ch] = 1.0;
221 fcs_trg_gain_correction[ns][ehp][dep][ch] = 1.0;
223 fcs_trg_pedestal[ns][ehp][dep][ch] = 0;
225 mTrgSim->p_g[ns][ehp][dep][ch].ped = fcs_trg_pedestal[ns][ehp][dep][ch];
227 float ggg = fcs_trg_pt_correction[ns][ehp][dep][ch];
229 float gg = ggg * fcs_trg_gain_correction[ns][ehp][dep][ch];
230 int g = (uint32_t)(gg*256.0+0.5) ;
231 mTrgSim->p_g[ns][ehp][dep][ch].gain = g;
241 fprintf(gainfile,
"%2d %2d %2d %2d %8.3f\n",ns,ehp,dep,ch,
242 fcs_trg_pt_correction[ns][ehp][dep][ch]);
244 fprintf(gainfile2,
"%2d %2d %2d %2d %8.3f\n",ns,ehp,dep,ch,
245 (fcs_trg_pt_correction[ns][ehp][dep][ch]-1.0)/2.0 + 1.0);
248 if(gainfile) fclose(gainfile);
249 if(gainfile2) fclose(gainfile2);
256 printf(
"Closing %s\n",mFilename);
260 printf(
"Closing %s\n",mQaTreeFilename);
262 mQaTreeFile->Close();
265 printf(
"Closing %s\n",mQaHistFilename);
267 mQaHistFile->Close();
270 int tot = NTRG[mNTRG];
271 LOG_INFO <<
"Triggers counts/"<<tot<<
" (rate at 5MHz BBC)"<<endm;
272 for(
int i=0; i<mNTRG; i++)
273 LOG_INFO << Form(
"%8s %9d (%12.2f)",ctrg[i],NTRG[i],
double(NTRG[i])/tot*5.0e6)<<endm;
280 event = (
StEvent*)GetInputDS(
"StEvent");
281 if(!event) {LOG_INFO <<
"StFcsTriggerSimMaker::Make did not find StEvent"<<endm;}
282 mFcsColl =
event->fcsCollection();
283 if(!mFcsColl) {LOG_INFO <<
"StFcsTriggerSimMaker::Make did not find StEvent->StFcsCollection"<<endm;}
286 if((!event)||(!mFcsColl)){
288 LOG_INFO<<
"No StEvent info available for StFcsTriggerSimMaker. "<< endm;
292 if(muevent && mMuFcsColl){
293 LOG_INFO <<
"Proceeding with StMuDst info to be used with StfcsTriggerSimMaker."<< endm;
295 LOG_ERROR <<
"StFcsTriggerSimMaker::Make did not find StEvent and MuEvent." << endm;
300 mTrgSim->start_event();
303 static uint16_t
data[8];
304 memset(data,0,
sizeof(data)) ;
305 memset(fcs_trg_sim_adc,0,
sizeof(fcs_trg_sim_adc));
307 for(
int det=0; det<=kFcsNDet; det++){
312 if((event)&&(mFcsColl)){
313 StSPtrVecFcsHit& hits = mFcsColl->hits(det);
315 int nh = mFcsColl->numberOfHits(det);
317 for(
int i=0; i<nh; i++){
319 unsigned short ch = hit->channel();
321 if(ehp<0 || ch>=32)
continue;
322 feedADC(hit, ns, ehp, data);
326 }
else if((muevent)&&(mMuFcsColl)){
328 int nh = mMuFcsColl->numberOfHits(det);
329 int det_hit_index = mMuFcsColl->indexOfFirstHit(det);
331 for(
int i=0; i<nh; i++){
333 int hit_index = i + det_hit_index;
335 unsigned short ch = hit->channel();
337 if(ehp<0 || ch>=32)
continue;
338 feedADC(hit, ns, ehp, data);
343 if(mFile) fprintf(mFile,
"%2d %2d %2d %2d %5d\n",-1,0,0,0,0);
344 LOG_INFO << Form(
"StFcsTriggerSimMaker feeded %d hits",n) << endm;;
348 uint32_t dsm_out = mTrgSim->end_event();
360 if(mQaTreeFile) mTree->Fill();
363 LOG_INFO << Form(
"Output to TCU = 0x%08x Filter=0x%08x",mTcu,mFlt)<<endm;
368 memset(trg,0,
sizeof(trg));
369 if((dsm_out >> 6) & 0x1) {trg[ 0]=1; mTrg+=1<<0;}
370 if((dsm_out >> 7) & 0x1) {trg[ 1]=1; mTrg+=1<<1;}
371 if((dsm_out >>10) & 0x1) {trg[ 2]=1; mTrg+=1<<2;}
372 if((dsm_out >> 8) & 0x1) {trg[ 3]=1; mTrg+=1<<3;}
373 if((dsm_out >>11) & 0x1) {trg[ 4]=1; mTrg+=1<<4;}
374 if((dsm_out >> 9) & 0x1) {trg[ 5]=1; mTrg+=1<<5;}
375 if((dsm_out >>12) & 0x1) {trg[ 6]=1; mTrg+=1<<6;}
376 if((dsm_out >>13) & 0x1) {trg[ 7]=1; mTrg+=1<<7;}
377 if((dsm_out >>14) & 0x1) {trg[ 8]=1; mTrg+=1<<8;}
378 if( ((dsm_out >>18) & 0x1) &&
379 ((dsm_out >>26) & 0x1) ) {trg[ 9]=1; mTrg+=1<<9;}
380 if( ((dsm_out >>17) & 0x1) &&
381 ((dsm_out >>25) & 0x1) ) {trg[10]=1; mTrg+=1<<10;}
382 if( ((dsm_out >>19) & 0x1) &&
383 ((dsm_out >>27) & 0x1) ) {trg[11]=1; mTrg+=1<<11;}
384 if((dsm_out >>15) & 0x1) {trg[12]=1; mTrg+=1<<12;}
385 if((dsm_out >> 2) & 0x1) {trg[13]=1; mTrg+=1<<13;}
386 if((dsm_out >> 1) & 0x1) {trg[14]=1; mTrg+=1<<14;}
387 if((dsm_out >> 0) & 0x1) {trg[15]=1; mTrg+=1<<15;}
388 if((dsm_out >> 5) & 0x1) {trg[16]=1; mTrg+=1<<16;}
389 if((dsm_out >> 4) & 0x1) {trg[17]=1; mTrg+=1<<17;}
390 if((dsm_out >> 3) & 0x1) {trg[18]=1; mTrg+=1<<18;}
391 if( ((dsm_out >>18) & 0x1) ||
392 ((dsm_out >>26) & 0x1) ) {trg[19]=1; mTrg+=1<<19;}
393 if( ((dsm_out >>19) & 0x1) ||
394 ((dsm_out >>27) & 0x1) ) {trg[20]=1; mTrg+=1<<20;}
396 if(mTrgRate) mTrgRate->Fill(mNTRG);
398 for(
int i=0; i<mNTRG; i++){
400 if(mTrgRate) mTrgRate->Fill(i);
405 LOG_INFO <<
"Triggers = ";
406 for(
int i=0; i<mNTRG; i++){
if(trg[i]) LOG_INFO << ctrg[i] <<
" ";}
414 mTrgSim->stage_2(ecal,hcal,pres,geo,output,&s2_to_dsm);
417 void StFcsTriggerSimMaker::print4B4(){
419 FILE* f1=fopen(
"EH4by4.txt",
"w");
420 FILE* f2=fopen(
"EH4by4dist.txt",
"w");
421 FILE* f3=fopen(
"EH4by4map.txt",
"w");
422 FILE* f4=fopen(
"EH2by2dist.txt",
"w");
423 FILE* f5=fopen(
"EH2by2map.txt",
"w");
424 FILE* f6=fopen(
"EH2by2map2.txt",
"w");
430 enum {EX2B2=10,EY2B2=16,HX2B2=6,HY2B2=10};
431 enum {EXOFF=1,EYOFF=1,HXOFF=0,HYOFF=0};
441 float esmx=mFcsDb->getShowerMaxZ(1);
442 float hsmx=mFcsDb->getShowerMaxZ(3);
443 float r1 = sqrt(eoff.x()*eoff.x()+eoff.z()*eoff.z());
444 float r2 = r1 + esmx;
445 float r3 = sqrt(hoff.x()*hoff.x()+hoff.z()*hoff.z());
446 float r4 = r3 + hsmx;
448 fprintf(f1,
"Distannce from IP to EcalSmax=%8.3f HcalSMax=%8.3f Ratio=%6.3f\n",r2,r4,sf);
450 fprintf(f1,
"\nHcal 4x4\n");
451 fprintf(f1,
" C R XY[cell] XYZ[cm]\n");
452 for(
int ns=1; ns<2; ns++){
453 for(
int j=0; j<HY2B2-1; j++){
454 float y=j*2 + HYOFF + 2;
455 for(
int i=0; i<HX2B2-1; i++){
456 float x=i*2 + HXOFF + 2;
458 fprintf(f1,
"H %2d %2d %4.1f %4.1f %8.2f %8.2f %8.2f\n",
459 i,j,x,y,hxyz[ns][i][j].x(),hxyz[ns][i][j].y(),hxyz[ns][i][j].z());
464 fprintf(f1,
"\nHcal 2x2\n");
465 fprintf(f1,
" C R XY[cell] XYZ[cm]\n");
466 for(
int ns=1; ns<2; ns++){
467 for(
int j=0; j<HY2B2; j++){
468 float y=j*2 + HYOFF + 1;
469 for(
int i=0; i<HX2B2; i++){
470 float x=i*2 + HXOFF + 1;
472 fprintf(f1,
"H %2d %2d %4.1f %4.1f %8.2f %8.2f %8.2f\n",
473 i,j,x,y,Hxyz[ns][i][j].x(),Hxyz[ns][i][j].y(),Hxyz[ns][i][j].z());
478 fprintf(f1,
"\nEcal 4x4\n");
479 fprintf(f1,
" C R XY[cell] XYZ[cm] | XYZ at HCAL | C R distance XYZ of closest Hcal 4x4\n");
481 fprintf(f3,
"static const int EtoHmap[%d][%d][2] = {\n",EY2B2-1,EX2B2-1);
482 fprintf(f5,
"static const int EtoH2map[%d][%d][2] = {\n",EY2B2-1,EX2B2-1);
483 fprintf(f6,
"static const int EtoH3map[%d][%d][4] = {\n",EY2B2-1,EX2B2-1);
484 for(
int ns=1; ns<2; ns++){
485 for(
int j=0; j<EY2B2-1; j++){
486 float y=j*2 + EYOFF + 2;
488 for(
int i=0; i<EX2B2-1; i++){
489 float x=i*2 + EXOFF + 2;
491 sxyz[ns][i][j] = sf * exyz[ns][i][j];
495 for(
int ii=0; ii<HX2B2-1; ii++){
496 for(
int jj=0; jj<HY2B2-1; jj++){
498 float d = diff.mag();
508 fprintf(f1,
"E %2d %2d %4.1f %4.1f %8.2f %8.2f %8.2f | %8.2f %8.2f %8.2f | %2d %2d %6.2f %8.2f %8.2f %8.2f\n",
510 exyz[ns][i][j].x(),exyz[ns][i][j].y(),exyz[ns][i][j].z(),
511 sxyz[ns][i][j].x(),sxyz[ns][i][j].y(),sxyz[ns][i][j].z(),
513 hxyz[ns][k][l].x(),hxyz[ns][k][l].y(),hxyz[ns][k][l].z());
514 fprintf(f2,
"%6.2f ",dmin);
515 if(i==EX2B2-2) fprintf(f2,
"\n");
516 fprintf(f3,
"{%2d,%2d}",l,k);
517 if(i<EX2B2-2) fprintf(f3,
",");
518 if(i==EX2B2-2) fprintf(f3,
"}");
523 for(
int ii=0; ii<HX2B2; ii++){
524 for(
int jj=0; jj<HY2B2; jj++){
526 float d = diff.mag();
536 fprintf(f1,
"E %2d %2d %4.1f %4.1f %8.2f %8.2f %8.2f | %8.2f %8.2f %8.2f | %2d %2d %6.2f %8.2f %8.2f %8.2f\n",
538 exyz[ns][i][j].x(),exyz[ns][i][j].y(),exyz[ns][i][j].z(),
539 sxyz[ns][i][j].x(),sxyz[ns][i][j].y(),sxyz[ns][i][j].z(),
541 Hxyz[ns][kk][ll].x(),Hxyz[ns][kk][ll].y(),Hxyz[ns][kk][ll].z());
542 fprintf(f4,
"%6.2f ",dmin2);
543 if(i==EX2B2-2) fprintf(f4,
"\n");
545 fprintf(f5,
"{%2d,%2d}",ll,kk);
546 if(i<EX2B2-2) fprintf(f5,
",");
547 if(i==EX2B2-2) fprintf(f5,
"}");
549 int i1=kk-1, i2=kk, j1=ll-1, j2=ll;
550 int r1=-1, r2=-1, r3=-1, r4=-1;
551 if(i1>=0 && i1<HX2B2-1 && j1>=0 && j1<HY2B2-1) r1=i1+j1*(HX2B2-1);
552 if(i2>=0 && i2<HX2B2-1 && j1>=0 && j1<HY2B2-1) r2=i2+j1*(HX2B2-1);
553 if(i1>=0 && i1<HX2B2-1 && j2>=0 && j2<HY2B2-1) r3=i1+j2*(HX2B2-1);
554 if(i2>=0 && i2<HX2B2-1 && j2>=0 && j1<HY2B2-1) r4=i2+j2*(HX2B2-1);
555 fprintf(f6,
"{%2d,%2d,%2d,%2d}",r1,r2,r3,r4);
556 if(i<EX2B2-2) fprintf(f6,
",");
557 if(i==EX2B2-2) fprintf(f6,
"}");
559 if(j<EY2B2-2) fprintf(f3,
",\n");
560 if(j==EY2B2-2) fprintf(f3,
"\n");
561 if(j<EY2B2-2) fprintf(f5,
",\n");
562 if(j==EY2B2-2) fprintf(f5,
"\n");
563 if(j<EY2B2-2) fprintf(f6,
",\n");
564 if(j==EY2B2-2) fprintf(f6,
"\n");
580 void StFcsTriggerSimMaker::printJP(){
582 FILE* f1=fopen(
"EHJP.txt",
"w");
583 FILE* f2=fopen(
"EHJPdist.txt",
"w");
585 enum {EXOFF=1,EYOFF=1,HXOFF=0,HYOFF=2};
591 float esmx=mFcsDb->getShowerMaxZ(1);
592 float hsmx=mFcsDb->getShowerMaxZ(3);
593 float r1 = sqrt(eoff.x()*eoff.x()+eoff.z()*eoff.z());
594 float r2 = r1 + esmx;
595 float r3 = sqrt(hoff.x()*hoff.x()+hoff.z()*hoff.z());
596 float r4 = r3 + hsmx;
598 fprintf(f1,
"Distannce from IP to EcalSmax=%8.3f HcalSMax=%8.3f Ratio=%6.3f\n",r2,r4,sf);
599 fprintf(f1,
"\nHcal 8x8\n");
600 fprintf(f1,
" C R XY[cell] XYZ[cm]\n");
601 for(
int ns=1; ns<2; ns++){
602 for(
int j=0; j<5; j++){
603 float y=j*2 + HYOFF + 4;
604 for(
int i=0; i<3; i++){
605 float x=i*2 + HXOFF + 4;
607 fprintf(f1,
"H %2d %2d %4.1f %4.1f %8.2f %8.2f %8.2f\n",
608 i,j,x,y,hxyz[ns][i][j].x(),hxyz[ns][i][j].y(),hxyz[ns][i][j].z());
612 fprintf(f1,
"\nEcal 12x16\n");
613 fprintf(f1,
" C R XY[cell] XYZ[cm] | XYZ at HCAL | distance XYZ of Hcal 8x8\n");
614 for(
int ns=1; ns<2; ns++){
615 for(
int j=0; j<5; j++){
616 float y=j*4 + EYOFF + 8;
617 for(
int i=0; i<3; i++){
618 float x=i*4 + EXOFF + 6;
620 sxyz[ns][i][j] = sf * exyz[ns][i][j];
622 float d = diff.mag();
623 fprintf(f1,
"E %2d %2d %4.1f %4.1f %8.2f %8.2f %8.2f | %8.2f %8.2f %8.2f | %6.2f %8.2f %8.2f %8.2f\n",
625 exyz[ns][i][j].x(),exyz[ns][i][j].y(),exyz[ns][i][j].z(),
626 sxyz[ns][i][j].x(),sxyz[ns][i][j].y(),sxyz[ns][i][j].z(),
628 hxyz[ns][i][j].x(),hxyz[ns][i][j].y(),hxyz[ns][i][j].z());
629 fprintf(f2,
"%6.2f ",d);
630 if(i==2) fprintf(f2,
"\n");
639 void StFcsTriggerSimMaker::readThresholdFile(){
640 LOG_INFO << Form(
"Reading Thresholds from %s",mThresholdFile)<<endm;
641 FILE* F=fopen(mThresholdFile,
"r");
643 LOG_ERROR << Form(
"Could not open %s",mThresholdFile)<<endm;
646 char f[10],name[100];
648 while(fscanf(F,
"%s %d %d %s %d",f, &i, &
id, name, &v) != EOF){
649 if(f[0] ==
'#')
continue;
651 printf(
"Reading Threshold %s %d\n",trg.Data(),v);
652 if (trg==
"FCS_PHTTHR") mTrgSim->PHTTHR=v;
653 else if(trg==
"FCS_EM-HERATIO-THR") mTrgSim->EM_HERATIO_THR=v;
654 else if(trg==
"FCS_HAD-HERATIO-THR") mTrgSim->HAD_HERATIO_THR=v;
655 else if(trg==
"FCS_EMTHR2") mTrgSim->EMTHR2=v;
656 else if(trg==
"FCS_EMTHR1") mTrgSim->EMTHR1=v;
657 else if(trg==
"FCS_EMTHR0") mTrgSim->EMTHR0=v;
658 else if(trg==
"FCS_ELETHR2") mTrgSim->ELETHR2=v;
659 else if(trg==
"FCS_ELETHR1") mTrgSim->ELETHR1=v;
660 else if(trg==
"FCS_ELETHR0") mTrgSim->ELETHR0=v;
661 else if(trg==
"FCS_HADTHR2") mTrgSim->HADTHR2=v;
662 else if(trg==
"FCS_HADTHR1") mTrgSim->HADTHR1=v;
663 else if(trg==
"FCS_HADTHR0") mTrgSim->HADTHR0=v;
664 else if(trg==
"FCS_JPATHR2") mTrgSim->JPATHR2=v;
665 else if(trg==
"FCS_JPATHR1") mTrgSim->JPATHR2=v;
666 else if(trg==
"FCS_JPATHR0") mTrgSim->JPATHR0=v;
667 else if(trg==
"FCS_JPBCTHR2") mTrgSim->JPBCTHR2=v;
668 else if(trg==
"FCS_JPBCTHR1") mTrgSim->JPBCTHR1=v;
669 else if(trg==
"FCS_JPBCTHR0") mTrgSim->JPBCTHR0=v;
670 else if(trg==
"FCS_JPBCTHRD") mTrgSim->JPBCTHRD=v;
671 else if(trg==
"FCS_JPDETHR2") mTrgSim->JPDETHR2=v;
672 else if(trg==
"FCS_JPDETHR1") mTrgSim->JPDETHR1=v;
673 else if(trg==
"FCS_JPDETHR0") mTrgSim->JPDETHR0=v;
674 else if(trg==
"FCS_JPDETHRD") mTrgSim->JPDETHRD=v;
675 else if(trg==
"FCS_EHTTHR") mTrgSim->EHTTHR=v;
676 else if(trg==
"FCS_HHTTHR") mTrgSim->HHTTHR=v;
677 else if(trg==
"FCS_ETOTTHR") mTrgSim->ETOTTHR=v;
678 else if(trg==
"FCS_HTOTTHR") mTrgSim->HTOTTHR=v;
680 printf(
"No Threshold called %s %d\n",trg.Data(),v);
687 void StFcsTriggerSimMaker::readThresholdDb(){
691 template<
typename T>
void StFcsTriggerSimMaker::feedADC(T*
hit,
int ns,
int ehp, uint16_t data_array[]){
693 unsigned short dep = hit->dep();
694 unsigned short ch = hit->channel();
697 fcs_trg_sim_adc[ns][ehp][dep][ch] = hit->adc(0);
699 int ntb=hit->nTimeBin();
700 for(
int t=0; t<ntb; t++){
701 int tb = hit->timebin(t);
702 if(tb>=mTrgTimebin-3 && tb<=mTrgTimebin+4){
703 data_array[tb-mTrgTimebin+3] = hit->adc(t);
707 mTrgSim->fill_event(ehp,ns,dep,ch,data_array,8) ;
709 data_array[1] = hit->adc(0)-1;
711 mTrgSim->fill_event(ehp,ns,dep,ch,data_array,8) ;
713 if(mFile) fprintf(mFile,
"%2d %2d %2d %2d %5d\n",ns,ehp,dep,ch,hit->adc(0));
static StMuFcsCollection * muFcsCollection()
returns pointer to current StMuFcsCollection
float getGainCorrection(int det, int id) const
get the gain for the channel for 8 timebin sum
int northSouth(int det) const
Ecal=0, Hcal=1, Pres=2.
StThreeVectorD getDetectorOffset(int det, double zdepth=-1) const
Utility functions related to DetectorPosition.
StThreeVectorD getStarXYZfromColumnRow(int det, float col, float row, float FcsZ=-1.0) const
get the STAR frame cooridnates from other way
int ecalHcalPres(int det) const
Ecal North=0, Ecal South=1, Hcal North=2, Hcal South=3, Pres=4/5.
static StMuEvent * event()
returns pointer to current StMuEvent (class holding the event wise information, e.g. event number, run number)
Base class for event records.
StarGenEvent * event()
Return a pointer to the event.
Main steering class for event generation.
int maxId(int det) const
number of column
UInt_t GetFilterResult()
Returns the filter result.
void getDepfromId(int detectorId, int id, int &ehp, int &ns, int &crt, int &slt, int &dep, int &ch) const
print ET gain