124 #include "StMessMgr.h"
125 #include "StEvent/StFcsHit.h"
126 #include "StEvent/StFcsCluster.h"
127 #include "StEvent/StFcsPoint.h"
132 float mEtGain[kFcsNDet][kFcsMaxId];
135 short mMap_ehp[kFcsNDet][kFcsMaxId];
136 short mMap_ns [kFcsNDet][kFcsMaxId];
137 short mMap_crt[kFcsNDet][kFcsMaxId];
138 short mMap_slt[kFcsNDet][kFcsMaxId];
139 short mMap_dep[kFcsNDet][kFcsMaxId];
140 short mMap_ch [kFcsNDet][kFcsMaxId];
141 short mMap_ppb[kFcsNDet][kFcsMaxId];
142 short mMap_ppp[kFcsNDet][kFcsMaxId];
143 short mMap_pph[kFcsNDet][kFcsMaxId];
144 short mMap_wcol[kFcsNDet][kFcsMaxId];
145 short mMap_jcol[kFcsNDet][kFcsMaxId];
148 short mRMap_det[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh];
149 short mRMap_id [kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh];
150 short mRMap_crt[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh];
151 short mRMap_slt[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh];
154 const unsigned short kFcsMaxBranch=2;
155 const unsigned short kFcsMaxAddr=16;
156 const unsigned short kFcsMaxSiPM=4;
157 short mScMap_ehp[kFcsNDet][kFcsMaxId];
158 short mScMap_ns[kFcsNDet][kFcsMaxId];
159 short mScMap_dep[kFcsNDet][kFcsMaxId];
160 short mScMap_bra[kFcsNDet][kFcsMaxId];
161 short mScMap_add[kFcsNDet][kFcsMaxId];
162 short mScMap_sipm[kFcsNDet][kFcsMaxId];
163 short mScMap_pp[kFcsNDet][kFcsMaxId];
164 short mScMap_j[kFcsNDet][kFcsMaxId];
167 short mRScMap_det[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxBranch][kFcsMaxAddr][kFcsMaxSiPM];
168 short mRScMap_id[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxBranch][kFcsMaxAddr][kFcsMaxSiPM];
171 const short EPPMap[8][6][3]={
172 {{20, 0, 1},{20, 1,-1},
173 { 0, 0, 2},{ 0, 1,-1},
174 { 1, 0, 3},{ 1, 1,-1}},
175 {{ 2, 0,-2},{ 2, 1,-1},
176 { 3, 0,-2},{ 3, 1,-1},
177 { 4, 0,-2},{ 4, 1,-1}},
178 {{22, 0, 4},{23, 0,-1},
179 { 5, 0, 5},{ 5, 1,-1},
180 { 6, 0, 6},{ 6, 1,-1}},
181 {{ 7, 0, 7},{ 7, 1,-1},
182 { 8, 0, 8},{ 8, 1,-1},
183 { 9, 0, 9},{ 9, 1,-1}},
184 {{10, 0,10},{10, 1,-1},
185 {11, 0,11},{11, 1,-1},
186 {12, 0,12},{12, 1,-1}},
187 {{13, 0,13},{13, 1,-1},
188 {14, 0,14},{14, 1,-1},
189 {22, 1,15},{23, 1,-1}},
190 {{15, 0,-2},{15, 1,-1},
191 {16, 0,-2},{16, 1,-1},
192 {17, 0,-2},{17, 1,-1}},
193 {{18, 0,16},{18, 1,-1},
194 {19, 0,17},{19, 1,-1},
195 {21, 0,-1},{21, 1,-1}}
197 const short HPPMap[4][6][3]={
198 {{ 6, 0, 1},{ 6, 1,-1},
199 { 0, 0, 2},{ 1, 0,-1},
200 {-1,-1,-1},{-1,-1,-1}},
201 {{ 2, 0, 3},{ 0, 1,-1},
202 { 1, 1, 4},{ 2, 1,-1},
203 { 8, 0, 5},{-1,-1,-1}},
204 {{ 8, 1, 6},{-1,-1,-1},
205 { 3, 0, 7},{ 4, 0,-1},
206 { 5, 0, 8},{ 3, 1,-1}},
207 {{ 4, 1, 9},{ 5, 1,-1},
208 { 7, 0,10},{ 7, 1,-1},
209 {-1,-1,-1},{-1,-1,-1}}
212 short EMapPPB[24][2];
213 short EMapPPP[24][2];
218 short HMapPPB[24][2];
219 short HMapPPP[24][2];
225 const char* colW[4]={
"Green ",
"Brown ",
"Orange",
"Blue "};
226 const char* colJ[8]={
"Blue ",
"Orange",
"Violet",
"Black ",
227 "Yellow",
"Red ",
"Grey ",
"Blue "};
228 const float leng[8]={ 6.5, 6.5, 5.0, 5.0,
230 const char* colJH[8]={
"Red ",
"Grey ",
"Orange",
"Yellow",
231 "Orange",
"Blue ",
"Red ",
"Yellow"};
232 const float lengH[8]={ 6.5, 5.0, 5.0, 5.0,
235 const char* EHP[3]={
"Ecal",
"Hcal",
"Pres"};
236 const char* CRT[5]={
"EN",
"MN",
"MA",
"MS",
"ES"};
237 const char* DET[6]={
"EN",
"ES",
"HN",
"HS",
"PN",
"PS"};
244 StFcsDb::~StFcsDb() {}
256 if(!t) { memset(&mFcsDetectorPosition,0,
sizeof(fcsDetectorPosition_st)); }
257 else { memcpy(&mFcsDetectorPosition,t,
sizeof(fcsDetectorPosition_st)); }
261 if(!t) { memset(&mFcsEcalGain,0,
sizeof(fcsEcalGain_st)); }
262 else { memcpy(&mFcsEcalGain,t,
sizeof(fcsEcalGain_st)); }
266 if(!t) { memset(&mFcsHcalGain,0,
sizeof(fcsHcalGain_st)); }
267 else { memcpy(&mFcsHcalGain,t,
sizeof(fcsHcalGain_st)); }
271 if(!t) { memset(&mFcsPresGain,0,
sizeof(fcsPresGain_st)); }
272 else { memcpy(&mFcsPresGain,t,
sizeof(fcsPresGain_st)); }
276 if(!t) { memset(&mFcsEcalGainCorr,0,
sizeof(fcsEcalGainCorr_st)); }
277 else { memcpy(&mFcsEcalGainCorr,t,
sizeof(fcsEcalGainCorr_st)); }
281 if(!t) { memset(&mFcsHcalGainCorr,0,
sizeof(fcsHcalGainCorr_st)); }
282 else { memcpy(&mFcsHcalGainCorr,t,
sizeof(fcsHcalGainCorr_st)); }
286 if(!t) { memset(&mFcsPresValley,0,
sizeof(fcsPresValley_st)); }
287 else { memcpy(&mFcsPresValley,t,
sizeof(fcsPresValley_st)); }
290 int StFcsDb::InitRun(
int runNumber) {
291 LOG_INFO <<
"StFcsDb::InitRun - run = " << runNumber << endm;
305 if(mGainMode==GAINMODE::DB){
306 int ie=0, ih=0, ip=0, ehp, ns, crt, slt, dep, ch;
307 for(
int ins=0; ins<kFcsNorthSouth; ins++){
308 int det=kFcsEcalNorthDetId+ins;
309 for(
int id=0;
id<
maxId(det);
id++){
311 mGain[ehp][ns][dep][ch]=mFcsEcalGain.gain[ie];
314 det=kFcsHcalNorthDetId+ins;
315 for(
int id=0;
id<
maxId(det);
id++){
317 mGain[ehp][ns][dep][ch]=mFcsHcalGain.gain[ih];
320 det=kFcsPresNorthDetId+ins;
321 for(
int id=0;
id<
maxId(det);
id++){
323 mGain[ehp][ns][dep][ch]=mFcsPresGain.gain[ip];
327 }
else if(mGainMode==GAINMODE::TXT){
331 if(mGainCorrMode==GAINMODE::DB){
332 int ie=0, ih=0, ip=0, ehp, ns, crt, slt, dep, ch;
333 for(
int ins=0; ins<kFcsNorthSouth; ins++){
334 int det=kFcsEcalNorthDetId+ins;
335 for(
int id=0;
id<
maxId(det);
id++){
337 mGainCorr[ehp][ns][dep][ch]=mFcsEcalGainCorr.gaincorr[ie];
340 det=kFcsHcalNorthDetId+ins;
341 for(
int id=0;
id<
maxId(det);
id++){
343 mGainCorr[ehp][ns][dep][ch]=mFcsHcalGainCorr.gaincorr[ih];
346 det=kFcsPresNorthDetId+ins;
347 for(
int id=0;
id<
maxId(det);
id++){
349 mGainCorr[ehp][ns][dep][ch]=mFcsPresValley.valley[ip];
353 }
else if(mGainCorrMode==GAINMODE::TXT){
354 readGainCorrFromText();
358 TDataSet* dbDataSet = StMaker::GetChain()->GetDataBase(
"Calibrations/rhic/vertexSeed");
360 vertexSeed_st* vSeed = ((St_vertexSeed*) (dbDataSet->FindObject(
"vertexSeed")))->GetTable();
364 mVdxdz = vSeed->dxdz;
365 mVdydz = vSeed->dydz;
366 mThetaX = TMath::ATan( mVdxdz );
367 mThetaY = TMath::ATan( mVdydz );
377 if(eh>=0 && eh<kFcsEHP && ns>=0 && ns<kFcsNorthSouth)
return eh*2 + ns;
382 if(det==0 || det==1)
return 0;
383 if(det==2 || det==3)
return 1;
384 if(det==4 || det==5)
return 2;
397 if (ehp==0){
return 8;}
398 else if(ehp==1){
return 4;}
399 else if(ehp==2){
return 9;}
402 if (ehp==0){
return kFcsEcalNRow;}
403 else if(ehp==1){
return kFcsHcalNRow;}
404 else if(ehp==2){
return kFcsPresNRow;}
414 if (ehp==0){
return 8;}
415 else if(ehp==1){
return 4;}
416 else if(ehp==2){
return 1;}
419 if (ehp==0){
return kFcsEcalNCol;}
420 else if(ehp==1){
return kFcsHcalNCol;}
421 else if(ehp==2){
return kFcsPresNCol;}
431 if (ehp==0){
return 64;}
432 else if(ehp==1){
return 16;}
433 else if(ehp==2){
return 9;}
436 if (ehp==0){
return kFcsEcalMaxId;}
437 else if(ehp==1){
return kFcsHcalMaxId;}
438 else if(ehp==2){
return kFcsPresMaxId;}
444 if(id<0 || id>=
maxId(det))
return -1;
449 if(id<0 || id>=
maxId(det))
return -1;
454 if(row<=0 || row>
nRow(det) ||
nRow(det)<0)
return -1;
455 if(col<=0 || col>
nColumn(det) ||
nRow(det)<0)
return -1;
456 return col - 1 +
nColumn(det)*(row-1);
460 return dep*kFcsMaxDepCh + ch;
464 int ehp,ns,crt,slt,dep,ch;
469 int scehp,scns,scdep,br,i2c,sipm,pp,j;
470 getSCmap(det,
id,scehp,scns,scdep,br,i2c,sipm,pp,j);
471 sprintf(name,
"%2s%03d_r%02dc%02d_Dep%02dCh%02d_F%02d/%1d/%02d/%1d",
472 DET[det],
id,r,c,dep,ch,scdep,br,i2c,sipm);
476 sprintf(name,
"%2s%03d_r%02dc%02d_Dep%02dCh%02d_PP%02d%1sTT%02d",
477 DET[det],
id,r,c,dep,ch,pp,tt%2==0?
"E":
"O",tt);
486 sprintf(name,
"%2s---_r--c--_Dep%02dCh%02d_F--/-/--/-",
492 int scehp,scns,scdep,br,i2c,sipm,pp,j;
493 getSCmap(det,
id,scehp,scns,scdep,br,i2c,sipm,pp,j);
494 sprintf(name,
"%2s%03d_r%02dc%02d_Dep%02dCh%02d_F%02d/%1d/%02d/%1d",
495 DET[det],
id,r,c,dep,ch,scdep,br,i2c,sipm);
499 sprintf(name,
"%2s%03d_r%02dc%02d_Dep%02dCh%02d_PP%02d%1s/TT%02d",
500 DET[det],
id,r,c,dep,ch,pp,tt%2==0?
"E":
"O",tt);
507 int r,c,dep,ch,scdep,br,i2c,sipm;
508 sscanf(name,
"%2s%03d_r%02dc%02d_Dep%02dCh%02d_F%02d/%1d/%02d/%1d",
509 detname,&
id,&r,&c,&dep,&ch,&scdep,&br,&i2c,&sipm);
515 if ( detname==
"EN") {
return 0;}
516 else if( detname==
"ES") {
return 1;}
517 else if( detname==
"HN") {
return 2;}
518 else if( detname==
"HS") {
return 3;}
519 else if( detname==
"PN") {
return 4;}
520 else if( detname==
"PS") {
return 5;}
522 LOG_ERROR <<
"ERROR:Invalid name for detector;Input:"<<detname<<endm;
527 unsigned short StFcsDb::getKey(
unsigned short detid,
unsigned short id){
return ( (detid & 0x7)<<12 | (
id & 0xffff) ); }
528 void StFcsDb::getDetIdFromKey(
unsigned short key,
unsigned short& detid,
unsigned short&
id)
530 detid = (key >> 12) & 0x0007;
533 unsigned short StFcsDb::getDetFromKey(
unsigned short key){
return (key >> 12) & 0x0007; }
534 unsigned short StFcsDb::getIdFromKey(
unsigned short key) {
return (key & 0x0fff); }
538 const float bOffY=-(17.0*5.81);
555 if( det%2==0 ){ detangle *= -1.0; }
556 xoff = zdepth*sin(detangle);
557 zoff = zdepth*cos(detangle);
560 if(det==0)
return StThreeVectorD(-17.399+xoff, -5.26, 710.16+zoff);
561 if(det==1)
return StThreeVectorD( 17.399+xoff, -5.26, 710.16+zoff);
562 if(det==2)
return StThreeVectorD(-21.285+xoff, +1.80, 782.63+zoff);
563 if(det==3)
return StThreeVectorD( 21.285+xoff, +1.80, 782.63+zoff);
568 mFcsDetectorPosition.yoff[det],
569 mFcsDetectorPosition.zoff[det]+zoff);
576 if(det==0)
return 1.73;
577 if(det==1)
return 1.73;
578 if(det==2)
return 1.73;
579 if(det==3)
return 1.73;
580 if(det==4)
return 0.0;
581 if(det==5)
return 0.0;
586 if(det==0)
return 5.542+0.03;
587 if(det==1)
return 5.542+0.03;
588 if(det==2)
return 9.99+0.00;
589 if(det==3)
return 9.99+0.00;
598 if(det==0 || det==1) {
return 30.97;}
599 if(det==2 || det==3) {
return 84.24;}
603 float StFcsDb::getShowerMaxZ(
int det)
const{
604 if(det==0 || det==1)
return 15.0;
605 if(det==2 || det==3)
return 25.0;
619 if(mLeakyHcal==1 && (det==kFcsHcalNorthDetId || det==kFcsHcalSouthDetId)){
622 }
else if(col==kFcsHcalNCol){
637 int c1=0, c2=0, r1=0, r2=0;
638 if(det<=kFcsEcalSouthDetId){
643 }
else if(det<=kFcsHcalSouthDetId){
657 double ecalD = sqrt(ecalfront.x()*ecalfront.x() + ecalfront.z()*ecalfront.z());
658 double hcalD = sqrt(hcalfront.x()*hcalfront.x() + ecalfront.z()*hcalfront.z());
659 double ecalSMD = ecalD + getShowerMaxZ(ns);
660 double hcalSMD = hcalD + getShowerMaxZ(ns+2);
661 double hcalLocalcm = hcalLocalX *
getXWidth(ns+2);
662 return hcalLocalcm*ecalSMD/hcalSMD;
665 LOG_INFO <<
"Need to be implememted!!!"<<endm;
674 double ecalSMD = ecalfront.z() + getShowerMaxZ(ns) - zvtx;
675 double hcalSMD = hcalfront.z() + getShowerMaxZ(ns+2) - zvtx;
676 double hcalLocalcm = hcalLocalY *
getYWidth(ns+2);
677 double hcalStar = double(
nRow(ns+2))/2.0*
getYWidth(ns+2)+hcalfront.y()-hcalLocalcm;
678 double hcalatEcal = hcalStar*ecalSMD/hcalSMD;
679 return double(
nRow(ns))/2.0*
getYWidth(ns) + ecalfront.y() - hcalatEcal;
686 if(eNS!=hNS)
return 1000;
693 return sqrt(dX*dX + dY*dY);
700 if(eNS!=hNS)
return 1000;
707 return sqrt(dX*dX + dY*dY);
713 if( det%2==0 ){ detangle *= -1.0; }
715 double planenormal[3] = {sin(detangle),0,cos(detangle)};
722 if( g2ttrk->p[2]>=0 && g2ttrk->p[0]>=0 ){ det=1; }
723 if( g2ttrk->p[2]<0 && g2ttrk->p[0]<0 ){ det=1; }
731 if( g2ttrk->p[2]>=0 && g2ttrk->p[0]>=0 ){ det=3; }
732 if( g2ttrk->p[2]<0 && g2ttrk->p[0]<0 ){ det=3; }
740 if( g2ttrk->p[2]>=0 && g2ttrk->p[0]>=0 ){ det=1; }
741 if( g2ttrk->p[2]<0 && g2ttrk->p[0]<0 ){ det=1; }
749 if( g2ttrk->p[2]>=0 && g2ttrk->p[0]>=0 ){ det=3; }
750 if( g2ttrk->p[2]<0 && g2ttrk->p[0]<0 ){ det=3; }
756 double linedir[3] = {g2ttrk->p[0],g2ttrk->p[1],g2ttrk->p[2]};
758 int vertind = g2ttrk->start_vertex_p - 1;
759 double linestart[3] = {g2tvert[vertind].ge_x[0],g2tvert[vertind].ge_x[1],g2tvert[vertind].ge_x[2]};
761 return projectLine(det, linedir, linestart, showermaxz);
764 double zero[3] = {0,0,0};
770 double linedir[3] = {linedirection.x(),linedirection.y(),linedirection.z()};
771 double linestart[3] = {lineorigin.x(),lineorigin.y(),lineorigin.z()};
772 return projectLine(det,linedir,linestart,showermaxz);
777 if( showermaxz<0 ){ showermaxz = getShowerMaxZ(det); }
779 if( linedirection[2]>=0 && linedirection[0]>=0 ){ LOG_WARN <<
"Incorrect Det" << endm; }
780 if( linedirection[2]<0 && linedirection[0]<=0 ){ LOG_WARN <<
"Incorrect Det" << endm; }
783 if( linedirection[2]>=0 && linedirection[0]<0 ){ LOG_WARN <<
"Incorrect Det" << endm; }
784 if( linedirection[2]<0 && linedirection[0]>=0 ){ LOG_WARN <<
"Incorrect Det" << endm; }
787 if( det%2==0 ){ detangle *= -1.0; }
791 double tintersection =
792 (planenormal.x()*(xyzoff.x()-lineorigin[0])+planenormal.y()*(xyzoff.y()-lineorigin[1])+planenormal.z()*(xyzoff.z()-lineorigin[2])) /
793 (planenormal.x()*linedirection[0]+planenormal.y()*linedirection[1]+planenormal.z()*linedirection[2]);
795 return StThreeVectorD( linedirection[0]*tintersection+lineorigin[0], linedirection[1]*tintersection+lineorigin[1], linedirection[2]*tintersection+lineorigin[2] );
800 return getStarXYZ(hit->detectorId(),hit->id(),FcsZ);
827 if(FcsZ<0.0) FcsZ = getShowerMaxZ(det);
828 double x = 0.0, y=0.0, z=0.0;
831 y = off.y() + (double(
nRow(det)) / 2.0 *
getYWidth(det)) - FcsY;
833 x = off.x() - FcsX * cos(a) - FcsZ * sin(a);
834 z = off.z() + FcsZ * cos(a) - FcsX * sin(a);
836 x = off.x() + FcsX * cos(a) + FcsZ * sin(a);
837 z = off.z() + FcsZ * cos(a) - FcsX * sin(a);
840 if(mDebug>1) LOG_DEBUG << Form(
"getStarXYZ XOFF=%f YOFF=%f ZOFF=%f Angle=%f : x=%f y=%f z=%f",
841 off.x(),off.y(),off.z(),a,x,y,z) << endm;
846 return (
getStarXYZ(det,FcsX,FcsY,FcsZ)).phi();
849 float StFcsDb::getEta(
int det,
float FcsX,
float FcsY,
float FcsZ,
float zVertex)
const{
850 return (
getStarXYZ(det,FcsX,FcsY,FcsZ,zVertex)).pseudoRapidity();
857 xyznew.rotateX(+mThetaY);
858 xyznew.rotateY(-mThetaX);
862 LOG_DEBUG << Form(
"mVx=%8.4f mVdxdz=%8.4f mThetaX=%8.4f",mVx,mVdxdz,mThetaX) << endm;
863 LOG_DEBUG << Form(
"mVy=%8.4f mVdydz=%8.4f mThetaY=%8.4f",mVy,mVdydz,mThetaY) << endm;
864 LOG_DEBUG << Form(
"xyz = %lf %lf %lf",xyz.x(), xyz.y(), xyz.z()) << endm;
865 LOG_DEBUG << Form(
"xyz rot = %lf %lf %lf",xyznew.x(), xyznew.y(), xyznew.z()) << endm;
866 LOG_DEBUG << Form(
"p = %lf %lf %lf %lf",mom3.x(), mom3.y(), mom3.z(),e) << endm;
872 if(det==0 || det==1)
return 0.2;
873 if(det==2 || det==3)
return 0.0145;
874 if(det==4 || det==5)
return 2.0;
883 return getGain(hit->detectorId(), hit->id());
887 if(det>=0 && det<kFcsNDet && id>=0 &&
id<
maxId(det)) {
889 case GAINMODE::FIXED :
890 if(det<=kFcsHcalSouthDetId)
return 0.0053;
892 case GAINMODE::FORCED :
893 if(det<=kFcsEcalSouthDetId)
return mForceUniformGainEcal;
894 if(det<=kFcsHcalSouthDetId)
return mForceUniformGainHcal;
895 if(det<=kFcsPresSouthDetId)
return mForceUniformGainPres;
898 int ehp,ns,dep,ch,crt,slt;
900 return mGain[ehp][ns][dep][ch];
911 if(det>=0 && det<kFcsNDet && id>=0 &&
id<
maxId(det)) {
912 switch(mGainCorrMode){
913 case GAINMODE::FIXED :
914 if(det<=kFcsHcalSouthDetId)
return 1.0;
916 case GAINMODE::FORCED :
917 if(det<=kFcsEcalSouthDetId)
return mForceUniformGainCorrectionEcal;
918 if(det<=kFcsHcalSouthDetId)
return mForceUniformGainCorrectionHcal;
919 if(det<=kFcsPresSouthDetId)
return mForceUniformGainCorrectionPres;
922 int ehp,ns,dep,ch,crt,slt;
924 return mGainCorr[ehp][ns][dep][ch];
939 return getGain8(hit->detectorId(), hit->id());
947 ehp=-1; ns=-1; crt=-1; slt=-1; dep=-1; ch=-1;
948 if(detectorId<0 || detectorId>=kFcsNDet)
return;
949 if(id<0 || id>=kFcsMaxId)
return;
960 detectorId=6;
id=4095; crt=0; slt=0;
961 if(ehp<0 || ehp>=kFcsEHP)
return;
962 if(ns<0 || ns>=kFcsNorthSouth)
return;
963 if(dep<0 || dep>=kFcsMaxDepBd)
return;
964 if(ch<0 || ch>=kFcsMaxDepCh)
return;
965 detectorId = mRMap_det[ehp][ns][dep][ch];
966 id = mRMap_id [ehp][ns][dep][ch];
967 crt = mRMap_crt[ehp][ns][dep][ch];
968 slt = mRMap_slt[ehp][ns][dep][ch];
994 int &ehp,
int &ns,
int &scdep,
int &branch,
int &fee_i2c,
int &sipm,
995 int &pp,
int &jacket)
const{
996 ehp=-1; ns=-1; scdep=-1; branch=-1; fee_i2c=-1; sipm=-1, pp=-1; jacket=-1;
997 if(det<0 || det>=kFcsNDet)
return;
998 if(id<0 || id>=kFcsMaxId)
return;
999 ehp=mScMap_ehp[det][id];
1000 ns=mScMap_ns[det][id];
1001 scdep=mScMap_dep[det][id];
1002 branch=mScMap_bra[det][id];
1003 fee_i2c= mScMap_add[det][id];
1004 sipm=mScMap_sipm[det][id];
1005 pp=mScMap_pp[det][id];
1006 jacket=mScMap_j[det][id];
1011 int &det,
int &
id)
const{
1014 if(ehp<0 || det>=kFcsEHP)
return;
1015 if(ns<0 || ns>=kFcsNorthSouth)
return;
1016 if(scdep<0 || scdep>=kFcsMaxDepBd)
return;
1017 if(branch<0 || branch>=kFcsMaxBranch)
return;
1018 if(fee_i2c<0 || fee_i2c>=kFcsMaxAddr)
return;
1019 if(sipm<0 || sipm>=kFcsMaxSiPM)
return;
1020 det=mRScMap_det[ehp][ns][scdep][branch][fee_i2c][sipm];
1021 id =mRScMap_id [ehp][ns][scdep][branch][fee_i2c][sipm];
1028 if(dep<=19)
return dep%5;
1039 case 0:
case 3:
return 0 + ns*4;
1040 case 1:
case 4:
return 1 + ns*4;
1041 case 2:
case 5:
return 2 + ns*4;
1043 if(ch<8 )
return 0 + ns*4;
1044 if(ch<16)
return 1 + ns*4;
1045 if(ch<24)
return 2 + ns*4;
1047 case 8:
return 3 + ns*4;
1058 for(
int b=1; b<=8; b++){
1059 for(
int p=2; p<=7; p++){
1060 short dep = EPPMap[b-1][p-2][0];
1061 short lh = EPPMap[b-1][p-2][1];
1062 short scr = EPPMap[b-1][p-2][2];
1067 EMapSCDEP[scr-1]=dep;
1068 EMapSCBRA[scr-1]=lh;
1075 for(
int b=1; b<=4; b++){
1076 for(
int p=2; p<=7; p++){
1077 short dep = HPPMap[b-1][p-2][0];
1078 short lh = HPPMap[b-1][p-2][1];
1079 short scr = HPPMap[b-1][p-2][2];
1084 HMapSCDEP[scr-1]=dep;
1085 HMapSCBRA[scr-1]=lh;
1096 int ehp,crt,slt,dep,ch,det,id;
1097 for(
int det=0; det<kFcsNDet; det++){
1098 for(
int id=0;
id<kFcsMaxId;
id++){
1099 mMap_ehp[det][id]=-1;
1100 mMap_ch[det][id]=-1;
1101 mMap_ppb[det][id]=-1;
1102 mMap_ppp[det][id]=-1;
1103 mMap_pph[det][id]=-1;
1104 mMap_wcol[det][id]=-1;
1105 mMap_jcol[det][id]=-1;
1106 mScMap_ehp[det][id]=-1;
1107 mScMap_pp[det][id]=-1;
1108 mScMap_j[det][id]=-1;
1111 for(
int ehp=0; ehp<kFcsEHP; ehp++){
1112 for(
int ns=0; ns<kFcsNorthSouth; ns++){
1113 for(
int dep=0; dep<kFcsMaxDepBd; dep++){
1114 for(
int ch=0; ch<kFcsMaxDepCh; ch++){
1115 mRMap_det[ehp][ns][dep][ch]=6;
1116 mRMap_id[ehp][ns][dep][ch]=-1;
1118 for(
int bra=0; bra<kFcsMaxBranch; bra++){
1119 for(
int add=0; add<kFcsMaxAddr; add++){
1120 for(
int sipm=0; sipm<kFcsMaxSiPM; sipm++){
1121 mRScMap_det[ehp][ns][dep][bra][add][sipm]=-1;
1122 mRScMap_id [ehp][ns][dep][bra][add][sipm]=-1;
1132 for(
int ns=0; ns<2; ns++){
1135 for(
int row=1; row<=kFcsEcalNRow; row++){
1136 for(
int col=1; col<=kFcsEcalNCol; col++){
1137 if (row== 1){crt=1+ns*2; slt=16; dep=20; ch=col-1;}
1138 else if(row==34){crt=1+ns*2; slt=17; dep=21; ch=col-1;}
1139 else if(col== 1){crt=1+ns*2; slt=18; dep=22; ch=row-2;}
1140 else if(col==22){crt=1+ns*2; slt=19; dep=23; ch=row-2;}
1143 dep=(col-2)/4 + (row-2)/8*5;
1145 ch =(col-2)%4 + ((row-2)%8)*4;
1147 mMap_ehp[det][id] = ehp;
1148 mMap_ns [det][id] = ns;
1149 mMap_crt[det][id] = crt;
1150 mMap_slt[det][id] = slt;
1151 mMap_dep[det][id] = dep;
1152 mMap_ch [det][id] =ch ;
1153 mRMap_det[ehp][ns][dep][ch] = det;
1154 mRMap_id [ehp][ns][dep][ch] = id ;
1155 mRMap_crt[ehp][ns][dep][ch] = crt;
1156 mRMap_slt[ehp][ns][dep][ch] = slt;
1160 int b = EMapPPB[dep][lh];
1161 int p = EMapPPP[dep][lh];
1162 int h = (ch%16)/4 + (p-2)*4 + 1;
1165 mMap_ppb[det][id] = b;
1166 mMap_ppp[det][id] = p;
1167 mMap_pph[det][id] = h;
1168 mMap_wcol[det][id] = w;
1169 mMap_jcol[det][id] = j;
1173 unsigned short scdep=EMapSCDEP[scr];
1174 unsigned short bra=EMapSCBRA[scr];
1175 unsigned short pp=EMapSCPP[scr];
1176 unsigned short pj=EMapSCJ[scr];;
1177 unsigned short add=(col-1)/2;
1178 unsigned short sipm;
1180 sipm = (col-1)%2 + ((row-1)%2)*2;
1182 sipm = col%2 + ((row-1)%2)*2;
1184 mScMap_ehp[det][id] = ehp;
1185 mScMap_ns[det][id] = ns;
1186 mScMap_dep[det][id] = scdep;
1187 mScMap_bra[det][id] = bra;
1188 mScMap_add[det][id] = add;
1189 mScMap_sipm[det][id] = sipm;
1190 mScMap_pp[det][id] = pp;
1191 mScMap_j[det][id] = pj;
1192 mRScMap_det[ehp][ns][scdep][bra][add][sipm]=det;
1193 mRScMap_id[ehp][ns][scdep][bra][add][sipm]=id;
1202 for(
int ns=0; ns<2; ns++){
1206 for(
int row=1; row<=kFcsHcalNRow; row++){
1207 for(
int col=1; col<=kFcsHcalNCol; col++){
1208 if (col==13){dep=8; ch=row-1;}
1209 else if(row== 1){dep=6; ch=(col-1)%4 + ((col-1)/4)*8 ;}
1210 else if(row== 2){dep=6; ch=(col-1)%4 + ((col-1)/4)*8 + 4;}
1211 else if(row==19){dep=7; ch=(col-1)%4 + ((col-1)/4)*8 ;}
1212 else if(row==20){dep=7; ch=(col-1)%4 + ((col-1)/4)*8 + 4;}
1214 dep= (col-1)/4 + ((row-3)/8)*3;
1215 ch = (col-1)%4 + ((row-3)%8)*4;
1218 mMap_ehp[det][id] = ehp;
1219 mMap_ns [det][id] = ns;
1220 mMap_crt[det][id] = crt;
1221 mMap_slt[det][id] = slt;
1222 mMap_dep[det][id] = dep;
1223 mMap_ch[det][id] =ch ;
1224 mRMap_det[ehp][ns][dep][ch] = det;
1225 mRMap_id [ehp][ns][dep][ch] = id ;
1226 mRMap_crt[ehp][ns][dep][ch] = crt;
1227 mRMap_slt[ehp][ns][dep][ch] = slt;
1231 int b = HMapPPB[dep][lh];
1232 int p = HMapPPP[dep][lh];
1233 int h = (ch%16)/4 + (p-2)*4 + 1;
1236 mMap_ppb[det][id] = b;
1237 mMap_ppp[det][id] = p;
1238 mMap_pph[det][id] = h;
1239 mMap_wcol[det][id] = w;
1240 mMap_jcol[det][id] = j;
1243 unsigned short feerow = (row-1)/2;
1244 unsigned short scdep=HMapSCDEP[feerow];
1245 unsigned short bra=HMapSCBRA[feerow];
1246 unsigned short pp=HMapSCPP[feerow];
1247 unsigned short pj=HMapSCJ[feerow];
1248 unsigned short add=col-1;
1249 unsigned short sipm;
1255 mScMap_ehp[det][id] = ehp;
1256 mScMap_ns[det][id] = ns;
1257 mScMap_dep[det][id] = scdep;
1258 mScMap_bra[det][id] = bra;
1259 mScMap_add[det][id] = add;
1260 mScMap_pp[det][id] = pp;
1261 mScMap_j[det][id] = pj;
1262 mScMap_sipm[det][id] = sipm;
1263 mRScMap_det[ehp][ns][scdep][bra][add][sipm]=det;
1264 mRScMap_id[ehp][ns][scdep][bra][add][sipm]=id;
1274 for(
int ns=0; ns<2; ns++){
1277 for(
int dep=0; dep<6; dep++){
1278 for(
int ch=0; ch<32; ch++){
1281 mMap_ehp[det][id] = ehp;
1282 mMap_ns [det][id] = ns;
1283 mMap_crt[det][id] = crt;
1284 mMap_slt[det][id] = slt;
1285 mMap_dep[det][id] = dep;
1286 mMap_ch[det][id] = ch ;
1287 mRMap_det[ehp][ns][dep][ch] = det;
1288 mRMap_id [ehp][ns][dep][ch] = id ;
1289 mRMap_crt[ehp][ns][dep][ch] = crt;
1290 mRMap_slt[ehp][ns][dep][ch] = slt;
1297 int ehp,crt,slt,dep,ch,det,id,ns;
1302 for(
int det=0; det<kFcsNDet; det++){
1303 for(
int id=0;
id<kFcsMaxId;
id++){
1304 mMap_ehp[det][id]=-1;
1305 mMap_ns[det][id]=-1;
1306 mMap_crt[det][id]=-1;
1307 mMap_slt[det][id]=-1;
1308 mMap_dep[det][id]=-1;
1309 mMap_ch[det][id]=-1;
1312 for(
int ehp=0; ehp<kFcsEHP; ehp++){
1313 for(
int ns=0; ns<kFcsNorthSouth; ns++){
1314 for(
int dep=0; dep<kFcsMaxDepBd; dep++){
1315 for(
int ch=0; ch<kFcsMaxDepCh; ch++){
1316 mRMap_det[ehp][ns][dep][ch]=6;
1317 mRMap_id[ehp][ns][dep][ch]=-1;
1318 mRMap_crt[ehp][ns][dep][ch]=-1;
1319 mRMap_slt[ehp][ns][dep][ch]=-1;
1331 for(
int row=1; row<=8; row++){
1332 for(
int col=1; col<=8; col++){
1335 mMap_ehp[det][id] = ehp;
1336 mMap_ns [det][id] = ns;
1337 mMap_crt[det][id] = crt;
1338 mMap_slt[det][id] = slt;
1339 mMap_dep[det][id] = dep;
1340 mMap_ch [det][id] = c[dep] ;
1342 mRMap_det[ehp][ns][dep][c[dep]] = det;
1343 mRMap_id [ehp][ns][dep][c[dep]] = id ;
1344 mRMap_crt[ehp][ns][dep][c[dep]] = crt;
1345 mRMap_slt[ehp][ns][dep][c[dep]] = slt;
1357 for(
int row=1; row<=4; row++){
1358 for(
int col=1; col<=4; col++){
1359 mMap_ehp[det][id] = ehp;
1360 mMap_ns [det][id] = ns;
1361 mMap_crt[det][id] = crt;
1362 mMap_slt[det][id] = slt;
1363 mMap_dep[det][id] = dep;
1364 mMap_ch[det][id] =ch ;
1365 mRMap_det[ehp][ns][dep][ch] = det;
1366 mRMap_id [ehp][ns][dep][ch] = id ;
1367 mRMap_crt[ehp][ns][dep][ch] = crt;
1368 mRMap_slt[ehp][ns][dep][ch] = slt;
1380 for(
int id=0;
id<9;
id++){
1381 mMap_ehp[det][id] = ehp;
1382 mMap_ns [det][id] = ns;
1383 mMap_crt[det][id] = crt;
1384 mMap_slt[det][id] = slt;
1385 mMap_dep[det][id] = dep;
1386 mMap_ch[det][id] = ch ;
1387 mRMap_det[ehp][ns][dep][ch] = det;
1388 mRMap_id [ehp][ns][dep][ch] = id ;
1389 mRMap_crt[ehp][ns][dep][ch] = crt;
1390 mRMap_slt[ehp][ns][dep][ch] = slt;
1399 if(tt<0 || tt>=32)
return;
1402 row=(pp-1)*2 + (tt+1)%2 + 1;
1404 }
else if(pp>=7 && pp<=12){
1406 row=(12-pp)*2 + (tt)%2 + 1;
1409 id=(row-1)*16 + col;
1417 tt = (col-1)*2 - (row-1)%2 + 1;
1419 pp = 12 - (row-1)/2;
1420 tt = (col-1)*2 + (row-1)%2;
1425 fprintf(f,
"### Detector\n");
1426 fprintf(f,
"#det : 0/1=ECal-N/S 2/3=Hcal-N/S 4/5=PRS-N/S\n");
1427 fprintf(f,
"#id : 0~747 for Ecal 0~259 for Hcal\n");
1428 fprintf(f,
"#row : 1~34 for Ecal 1~20 for Hcal\n");
1429 fprintf(f,
"#col : 1~22 for Ecal 1~13 for Hcal\n");
1430 fprintf(f,
"### Readout\n");
1431 fprintf(f,
"#ehp : 0=ECal 1=Hcal 2=PRS\n");
1432 fprintf(f,
"#ns : 0=north 1=south\n");
1433 fprintf(f,
"#crt : 0=EcalNorth 1=MixNorth 2=Main 3=MixSouth 4=EcalSouth\n");
1434 fprintf(f,
"#slt : 0~19\n");
1435 fprintf(f,
"#dep : 0~24 for Ecal 0~7 for Hcal 0~3 for Pres\n");
1436 fprintf(f,
"#ch : 0~31 for all DEP\n");
1437 fprintf(f,
"### Patchpanel and cable\n");
1438 fprintf(f,
"#FRow: FEEBd Row = (row-1)/2 [0-16 for Ecal 0-9 for Hcal]\n");
1439 fprintf(f,
"#FCol: FEEBd Col = FEEBd Addr [0-10 for Ecal 0-12 for Hcal]\n");
1440 fprintf(f,
"#SiPM: FEEBd Ch# [0-3 for Ecal 0-1 for Hcal]\n");
1441 fprintf(f,
"#ppb : PatchPanel Board# [1~8 for Ecal 1-4 for Hcal]\n");
1442 fprintf(f,
"#ppp : PatchPanel MDR cable P# [2-7]\n");
1443 fprintf(f,
"#pph : PatchPanel Header# [1-24]\n");
1444 fprintf(f,
"#jcol: Cable Jacket color\n");
1445 fprintf(f,
"#wcol: Cable Wire color\n");
1446 fprintf(f,
"#length: Cable length\n");
1449 fprintf(f,
"#det id row col ehp ns crt slt dep ch Frow Fcol SiPM ppb ppp pph jcol wcol length\n");
1451 fprintf(f,
"#ehp ns dep ch crt slt det id row col Frow Fcol SiPM ppb ppp pph jcol wcol length\n");
1455 fprintf(f,
"#det,id,row,col,ehp,ns,crt,slt,dep,ch,Frow,Fcol,SiPM,ppb,ppp,pph,jcol,wcol,length\n");
1457 fprintf(f,
"#ehp,ns,dep,ch,crt,slt,det,id,row,col,Frow,Fcol,SiPM,ppb,ppp,pph,jcol,wcol,length\n");
1463 fprintf(f,
"# Css-DDch\n");
1464 fprintf(f,
"# C : crate 0~4 for EcalN,MixN,Main,MixS,EcalS\n");
1465 fprintf(f,
"# ss : slot (0~19)\n");
1466 fprintf(f,
"# DD : DEP bd# (0~24 for Ecal, 0~7 for Hcal\n");
1467 fprintf(f,
"# ch : DEP ch# (0~31 for all DEP)\n");
1471 fprintf(f,
"# crt-slt : ns ehp dep : DNiii-RR/CC DNiii-RR/CC DNiii-RR/CC ...\n");
1472 fprintf(f,
"# D : \"E\"cal, \"H\"cal, \"P\"res\n");
1473 fprintf(f,
"# N : North or South\n");
1474 fprintf(f,
"# iii : id\n");
1475 fprintf(f,
"# RR : Row\n");
1476 fprintf(f,
"# CC : Column\n");
1480 fprintf(f,
"### Detector\n");
1481 fprintf(f,
"#det : 0/1=ECal N/S, 2/3=Hcal N/S , 4/5=PRS N/S\n");
1482 fprintf(f,
"#id : 0~747 for Ecal, 0~259 for Hcal\n");
1483 fprintf(f,
"#row : 1~34 for Ecal, 1~20 for Hcal\n");
1484 fprintf(f,
"#col : 1~22 for Ecal, 1~13 for Hcal\n");
1485 fprintf(f,
"### Slow Control\n");
1486 fprintf(f,
"#ehp : 0=ECal, 1=Hcal, 2=PRS\n");
1487 fprintf(f,
"#ns : 0=north, 1=south\n");
1488 fprintf(f,
"#dep : 0~24 for Ecal, 0~7 for Hcal, 0~3 for Pres\n");
1489 fprintf(f,
"#branch : 0~1\n");
1490 fprintf(f,
"#switch addr: 0~15\n");
1491 fprintf(f,
"#SiPM# : 0~3 for Ecal, 0~1 for Hcal&Pres\n");
1492 fprintf(f,
"### Patchpanel and cable\n");
1493 fprintf(f,
"#ppb : PatchPanel Board# (1~8 for ecal, 1-4 for hcal)\n");
1494 fprintf(f,
"#J : PatchPanel SC conection (J1~J3)\n");
1496 fprintf(f,
"#det id row col ehp ns dep bra add SiPM ppb J\n");
1498 fprintf(f,
"#ehp ns dep bra add SiPM det id row col\n");
1503 int ehp,ns,crt,slt,dep,ch,det,id,row,col=0;
1505 FILE *f1 = fopen(
"fcsMap.txt",
"w");
printHeader(f1);
1506 FILE *f1c = fopen(
"fcsMap.csv",
"w");
printHeader(f1c,0,1);
1507 FILE *f1e = fopen(
"fcs_ecal_readout_map.csv",
"w");
printHeader(f1e);
1508 FILE *f1h = fopen(
"fcs_hcal_readout_map.csv",
"w");
printHeader(f1h);
1509 FILE *f1p = fopen(
"fcs_pres_readout_map.csv",
"w");
printHeader(f1p);
1511 FILE *f3 = fopen(
"fcsDepMap.txt",
"w");
printHeader(f3,1);
1512 FILE *f3c= fopen(
"fcsDepMap.csv",
"w");
printHeader(f3c,1,1);
1513 FILE *f4 = fopen(
"fcsDepMap2.txt",
"w");
printHeader3(f4);
1514 FILE *f5 = fopen(
"fcsScMap.txt",
"w");
printHeader4(f5);
1515 FILE *f5e = fopen(
"fcs_ecal_sc_map.csv",
"w");
printHeader4(f5e);
1516 FILE *f5h = fopen(
"fcs_hcal_sc_map.csv",
"w");
printHeader4(f5h);
1517 FILE *f5p = fopen(
"fcs_pres_sc_map.csv",
"w");
printHeader4(f5p);
1518 FILE *f6 = fopen(
"fcsScRevMap.txt",
"w");
printHeader4(f6,1);
1520 FILE *f7 = fopen(
"fcsEpdMap.txt",
"w");
1521 FILE *fpp = fopen(
"fcsPPMap.txt",
"w");
1524 for(ns=0; ns<2; ns++){
1527 fprintf(f2,
"Ecal NS=%1d\n",ns);
1528 for(row=1; row<=
nRow(det); row++){
1529 for(col=1; col<=
nColumn(det); col++){
1530 if(mMap_ehp[det][
id]>=0){
1531 fprintf(f1,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %2d %2d %2d %2d P%1d H%02d %6s %6s %3.1f\n",
1540 mScMap_add[det][
id],
1541 mScMap_sipm[det][
id],
1545 colJ[mMap_jcol[det][
id]],
1546 colW[mMap_wcol[det][
id]],
1547 leng[mMap_jcol[det][
id]]);
1548 fprintf(f1c,
"%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%2d,%2d,%2d,%2d,P%1d,H%02d,%6s,%6s,%3.1f\n",
1557 mScMap_add[det][
id],
1558 mScMap_sipm[det][
id],
1562 colJ[mMap_jcol[det][
id]],
1563 colW[mMap_wcol[det][
id]],
1564 leng[mMap_jcol[det][
id]]);
1565 fprintf(f1e,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1573 fprintf(f2,
"%1d%02d-%02d%02d ",
1574 mMap_crt[det][
id],mMap_slt[det][
id],
1575 mMap_dep[det][
id],mMap_ch[det][
id]);
1577 if(mScMap_ehp[det][
id]>=0){
1578 fprintf(f5,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %2d J%1d\n",
1580 mScMap_ehp[det][
id],
1581 mScMap_ns [det][
id],
1582 mScMap_dep[det][
id],
1583 mScMap_bra[det][
id],
1584 mScMap_add[det][
id],
1585 mScMap_sipm[det][
id],
1588 fprintf(f5e,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1590 mScMap_ehp[det][
id],
1591 mScMap_ns [det][
id],
1592 mScMap_dep[det][
id],
1593 mScMap_bra[det][
id],
1594 mScMap_add[det][
id],
1595 mScMap_sipm[det][
id]);
1604 for(
int ns=0; ns<2; ns++){
1607 fprintf(f2,
"Hcal NS=%1d\n",ns);
1608 for(row=1; row<=
nRow(det); row++){
1609 for(col=1; col<=
nColumn(det); col++){
1610 if(mMap_ehp[det][
id]>=0){
1611 fprintf(f1,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %2d %2d %2d %2d P%1d H%02d %6s %6s %3.1f\n",
1620 mScMap_add[det][
id],
1621 mScMap_sipm[det][
id],
1625 colJH[mMap_jcol[det][
id]],
1626 colW[mMap_wcol[det][
id]],
1627 lengH[mMap_jcol[det][
id]]);
1628 fprintf(f1c,
"%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%2d,%2d,%2d,%2d,P%1d,H%02d,%6s,%6s,%3.1f\n",
1637 mScMap_add[det][
id],
1638 mScMap_sipm[det][
id],
1642 colJH[mMap_jcol[det][
id]],
1643 colW[mMap_wcol[det][
id]],
1644 lengH[mMap_jcol[det][
id]]);
1645 fprintf(f1h,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1653 fprintf(f2,
"%1d%02d-%02d%02d ",
1654 mMap_crt[det][
id],mMap_slt[det][
id],
1655 mMap_dep[det][
id],mMap_ch[det][
id]);
1657 if(mScMap_ehp[det][
id]>=0){
1658 fprintf(f5,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %2d J%1d\n",
1660 mScMap_ehp[det][
id],
1661 mScMap_ns [det][
id],
1662 mScMap_dep[det][
id],
1663 mScMap_bra[det][
id],
1664 mScMap_add[det][
id],
1665 mScMap_sipm[det][
id],
1668 fprintf(f5h,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1670 mScMap_ehp[det][
id],
1671 mScMap_ns [det][
id],
1672 mScMap_dep[det][
id],
1673 mScMap_bra[det][
id],
1674 mScMap_add[det][
id],
1675 mScMap_sipm[det][
id]);
1684 for(
int ns=0; ns<2; ns++){
1687 fprintf(f2,
"PRS NS=%1d\n",ns);
1688 for(row=1; row<=
nRow(det); row++){
1689 for(col=1; col<=
nColumn(det); col++){
1690 if(mMap_ehp[det][
id]>=0){
1691 fprintf(f1,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %2d %2d %2d %2d P%1d H%02d %6s %6s %3.1f\n",
1699 0,0,0,0,0,0,
"x",
"x",0.0);
1700 fprintf(f1c,
"%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%2d,%2d,%2d,%2d,P%1d,H%02d,%6s,%6s,%3.1f\n",
1708 0,0,0,0,0,0,
"x",
"x",0.0);
1709 fprintf(f1p,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1717 fprintf(f2,
"%1d%02d-%02d%02d ",
1718 mMap_crt[det][
id],mMap_slt[det][
id],
1719 mMap_dep[det][
id],mMap_ch[det][
id]);
1721 if(mScMap_ehp[det][
id]>=0){
1722 fprintf(f5,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1724 mScMap_ehp[det][
id],
1725 mScMap_ns [det][
id],
1726 mScMap_dep[det][
id],
1727 mScMap_bra[det][
id],
1728 mScMap_add[det][
id],
1729 mScMap_sipm[det][
id]);
1730 fprintf(f5p,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1732 mScMap_ehp[det][
id],
1733 mScMap_ns [det][
id],
1734 mScMap_dep[det][
id],
1735 mScMap_bra[det][
id],
1736 mScMap_add[det][
id],
1737 mScMap_sipm[det][
id]);
1746 for(ehp=0; ehp<kFcsEHP; ehp++){
1747 for(ns=0; ns<2; ns++){
1748 for(dep=0; dep<kFcsMaxDepBd; dep++){
1749 if(ehp==1 && dep>8)
break;
1750 if(ehp==2 && dep>3)
break;
1752 for(ch=0; ch<kFcsMaxDepCh; ch++){
1753 if(mRMap_det[ehp][ns][dep][ch]<0){
1754 if(flag==1 && ch%8==7) fprintf(f4,
"\n");
1758 det = mRMap_det[ehp][ns][dep][ch];
1759 id = mRMap_id[ehp][ns][dep][ch];
1760 crt=mRMap_crt[ehp][ns][dep][ch];
1761 slt=mRMap_slt[ehp][ns][dep][ch];
1763 fprintf(f4,
"%2s%2d : NS=%1d %1d(%4s) DEP%02d : ",CRT[crt],slt,ns,ehp,EHP[ehp],dep);
1767 if(det>=0 && det<kFcsNDet){
1771 const char* colj;
float len;
1772 if(ehp==0) { colj=colJ[mMap_jcol[det][id]]; len=leng[mMap_jcol[det][id]]; }
1773 else { colj=colJH[mMap_jcol[det][id]]; len=lengH[mMap_jcol[det][id]];}
1774 fprintf(f3,
"%3d %3d %3d %3d %2s %2d %3d %3d %3d %3d %2d %2d %2d %2d P%1d H%02d %6s %6s %3.1f\n",
1779 mScMap_add[det][
id],
1780 mScMap_sipm[det][
id],
1785 colW[mMap_wcol[det][
id]],
1787 fprintf(f3c,
"%3d,%3d,%3d,%3d,%2s,%2d,%3d,%3d,%3d,%3d,%2d,%2d,%2d,%2d,P%1d,H%02d,%6s,%6s,%3.1f\n",
1792 mScMap_add[det][
id],
1793 mScMap_sipm[det][
id],
1798 colW[mMap_wcol[det][
id]],
1801 fprintf(f3,
"%3d %3d %3d %3d %2s %2d %3d %3d %3d %3d\n",
1805 fprintf(f3c,
"%3d,%3d,%3d,%3d,%2s,%2d,%3d,%3d,%3d,%3d\n",
1811 fprintf(f4,
"%2s%03d-%02d/%02d ",DET[det],
id,row,col);
1812 if(ch%8==7) fprintf(f4,
"\n");
1819 for(ehp=0; ehp<kFcsEHP; ehp++){
1820 for(ns=0; ns<2; ns++){
1821 for(dep=0; dep<kFcsMaxDepBd; dep++){
1822 if(ehp==1 && dep>8)
break;
1823 if(ehp==2 && dep>3)
break;
1824 for(
int bra=0; bra<kFcsMaxBranch; bra++){
1825 for(
int add=0; add<kFcsMaxAddr; add++){
1826 for(
int sipm=0; sipm<kFcsMaxSiPM; sipm++){
1827 if(mRScMap_det[ehp][ns][dep][bra][add][sipm]>=0){
1828 int det=mRScMap_det[ehp][ns][dep][bra][add][sipm];
1829 int id =mRScMap_id[ehp][ns][dep][bra][add][sipm];
1832 fprintf(f6,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1833 ehp,ns,dep,bra,add,sipm,
1844 fprintf(f7,
"#ehp ns crt slt dep ch det id row col pp tt Reversed(det id r c)\n");
1845 for(
int det=4; det<=5; det++){
1846 for(
int r=1; r<=
nRow(det); r++){
1847 for(
int c=1; c<=
nColumn(det); c++){
1848 int id =
getId(det,r,c);
1849 int ehp,ns,crt,slt,dep,ch,det2,id2,r2,c2,pp,tt;
1855 fprintf(f7,
"%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
1856 ehp,ns,crt,slt,dep,ch,
1864 for(
int ehp=0; ehp<2; ehp++){
1865 for(
int ns=0; ns<2; ns++){
1866 if(ehp==0 && ns==1)
continue;
1868 if(ehp==0) {bmax=8; fprintf(fpp,
"Ecal\n");}
1869 if(ehp==1 && ns==0) {bmax=4; fprintf(fpp,
"Hcal North\n");}
1870 if(ehp==1 && ns==1) {bmax=4; fprintf(fpp,
"Hcal South\n");}
1871 fprintf(fpp,
"PPB# P# DEP Ch T Pwr/ctrl Row#\n");
1872 for(
int b=1; b<=bmax; b++){
1873 for(
int p=2; p<=7; p++){
1876 dep = EPPMap[b-1][p-2][0];
1877 lh = EPPMap[b-1][p-2][1];
1878 scr = EPPMap[b-1][p-2][2];
1880 dep = HPPMap[b-1][p-2][0];
1881 lh = HPPMap[b-1][p-2][1];
1882 scr = HPPMap[b-1][p-2][2];
1884 fprintf(fpp,
"%2d %2d ",b,p);
1886 fprintf(fpp,
"%2d %02d-%02d ",dep,lh*16,lh*16+15);
1887 for(
int i=0; i<4; i++){
1889 int ch = lh*16 + i*4;
1890 int det = mRMap_det[ehp][ns][dep][ch];
1891 int id = mRMap_id[ehp][ns][dep][ch];
1896 fprintf(fpp,
"T%02d=R%02d-%6s ",t,row,colJ[col]);
1898 fprintf(fpp,
"T%02d=R%02d-%6s ",t,row,colJH[col]);
1901 fprintf(fpp,
"T%02d= ",t);
1908 fprintf(fpp,
"J%1d ",p/2);
1909 if(scr>0) fprintf(fpp,
"%2d,%2d",scr*2-1,scr*2);
1910 else if(scr==-2) fprintf(fpp,
"no power");
1911 else fprintf(fpp,
"-");
1938 float StFcsDb::getEtGain(
int det,
int id,
float factor)
const{
1939 if(det<0 || det>=kFcsNDet)
return 0.0;
1940 if(id<0 || id>=kFcsMaxId)
return 0.0;
1941 return (mEtGain[det][
id]-1.0)*factor+1.0;
1946 double norm[2]={0.24711, 0.24711};
1947 for(
int det=0; det<kFcsNDet; det++){
1950 for(
int i=0; i<
maxId(det); i++){
1954 double r=xyz.perp();
1956 double ptch=gain/l*r;
1957 ratio=ptch/norm[eh]*1000;
1959 mEtGain[det][i]=ratio;
1962 if(mDebug==0)
return;
1964 FILE *f1 = fopen(
"fcsPtGain.txt",
"w");
1965 FILE *f2 = fopen(
"fcsPtGain2.txt",
"w");
1966 FILE *f3 = fopen(
"fcsPtGain3.txt",
"w");
1967 FILE *f4 = fopen(
"fcs_ecal_phys_gains.txt",
"w");
1968 FILE *f5 = fopen(
"fcs_hcal_phys_gains.txt",
"w");
1969 FILE *f6 = fopen(
"fcs_ecal_calib_gains.txt",
"w");
1970 FILE *f7 = fopen(
"fcs_hcal_calib_gains.txt",
"w");
1971 fprintf(f4,
"#ehp ns dep ch EtGain\n");
1972 fprintf(f5,
"#ehp ns dep ch EtGain\n");
1973 fprintf(f6,
"#ehp ns dep ch CalibGain\n");
1974 fprintf(f7,
"#ehp ns dep ch CalibGain\n");
1975 for(
int det=0; det<kFcsNDet; det++){
1979 fprintf(f2,
"DET=%1d ET/ch [unit = MeV/count]\n", det);
1980 fprintf(f3,
"DET=%1d normalized ET/ch [unit=%f MeV/count]\n", det,norm[eh]);
1981 for(
int row=1; row<=
nRow(det); row++){
1982 for(
int col=1; col<=
nColumn(det); col++){
1984 double r=xyz.perp();
1989 double ptch=gain/l*r;
1991 if(eh<2) ratio=ptch/norm[eh]*1000;
1992 fprintf(f1,
"D=%1d Id=%3d Row=%2d Column=%2d xyz=%7.2f %7.2f %7.2f Gain=%7.5f ET/ch=%6.4f [MeV/count] norm=%6.4f\n",
1993 det,
id,row,col,x,y,z,gain,ptch*1000,ratio);
1994 fprintf(f2,
"%7.5f ", ptch*1000);
1995 fprintf(f3,
"%7.5f ", ratio);
2002 for(
int ehp=0; ehp<2; ehp++){
2003 for(
int ns=0; ns<2; ns++){
2004 for(
int dep=0; dep<
getNDep(ehp,ns); dep++){
2005 for(
int ch=0; ch<kFcsMaxDepCh; ch++){
2008 float ratio = mEtGain[det][id];
2009 float calib = (ratio-1.0)/2.0+1.0;
2011 fprintf(f4,
"%3d %3d %3d %3d %8.4f\n",ehp,ns,dep,ch,ratio);
2012 fprintf(f6,
"%3d %3d %3d %3d %8.4f\n",ehp,ns,dep,ch,calib);
2014 fprintf(f5,
"%3d %3d %3d %3d %8.4f\n",ehp,ns,dep,ch,ratio);
2015 fprintf(f7,
"%3d %3d %3d %3d %8.4f\n",ehp,ns,dep,ch,calib);
2031 return mPed[ehp][ns][dep][ch];
2035 mPed[ehp][ns][dep][ch]=ped;
2039 memset(mPed,0,
sizeof(mPed));
2040 LOG_INFO << Form(
"Reading Pedestal from %s",file)<<endm;
2041 FILE* F=fopen(file,
"r");
2043 LOG_ERROR << Form(
"Could not open %s",file)<<endm;
2048 while(fscanf(F,
"%d %d %d %d %f %f",&ehp,&ns,&dep,&ch,&mean,&rms) != EOF){
2049 mPed[ehp][ns][dep][ch]=mean;
2050 LOG_INFO << Form(
"PED %1d %1d %2d %2d %f %f",ehp,ns,dep,ch,mPed[ehp][ns][dep][ch],rms)<<endm;
2055 void StFcsDb::readGainFromText(){
2056 memset(mGain,0,
sizeof(mGain));
2057 LOG_INFO << Form(
"Reading Gain from %s",mGainFilename)<<endm;
2058 FILE* F=fopen(mGainFilename,
"r");
2060 LOG_ERROR << Form(
"Could not open %s",mGainFilename)<<endm;
2065 while(fscanf(F,
"%d %d %d %d %f",&ehp,&ns,&dep,&ch,&gain) != EOF){
2066 mGain[ehp][ns][dep][ch]=gain;
2067 LOG_INFO<<Form(
"GAIN %1d %1d %2d %2d %f",ehp,ns,dep,ch,mGain[ehp][ns][dep][ch])<<endm;
2072 void StFcsDb::readGainCorrFromText(){
2073 memset(mGainCorr,0,
sizeof(mGainCorr));
2074 LOG_INFO << Form(
"Reading GainCorr from %s",mGainCorrFilename)<<endm;
2075 FILE* F=fopen(mGainCorrFilename,
"r");
2077 LOG_ERROR << Form(
"Could not open %s",mGainCorrFilename)<<endm;
2082 while(fscanf(F,
"%d %d %d %d %f",&ehp,&ns,&dep,&ch,&gain) != EOF){
2083 mGainCorr[ehp][ns][dep][ch]=gain;
2084 LOG_INFO<<Form(
"GAIN CORR %1d %1d %2d %2d %f",ehp,ns,dep,ch,mGainCorr[ehp][ns][dep][ch])<<endm;
2092 while(g2ttrk[i].next_parent_p !=0){
2094 LOG_INFO<<Form(
" BackTrace from=%3d id=%3d Epid=%4d Gpid=%3d Vtx=%3d Parent=%3d E=%6.2f",
2095 id,g2ttrk[i].
id,g2ttrk[i].eg_pid,g2ttrk[i].ge_pid,g2ttrk[i].start_vertex_p,
2096 g2ttrk[i].next_parent_p,g2ttrk[i].e)<<endm;
2097 i = g2ttrk[i].next_parent_p - 1;
2099 if(mDebug>3) LOG_INFO<<Form(
" BackTrace from=%3d id=%3d Epid=%4d Gpid=%3d Vtx=%3d Parent=%3d E=%6.2f Primary!!",
2100 id,g2ttrk[i].
id,g2ttrk[i].eg_pid,g2ttrk[i].ge_pid,g2ttrk[i].start_vertex_p,
2101 g2ttrk[i].next_parent_p,g2ttrk[i].e)<<endm;
2107 c.hits().push_back(h);
2108 return getG2tTrack(&c,g2ttrk,fraction,ntrk,order,0);
2111 const g2t_track_st* StFcsDb::getPrimaryG2tTrack(
StFcsHit* h, g2t_track_st* g2ttrk,
float& fraction,
int& ntrk,
unsigned int order){
2113 c.hits().push_back(h);
2114 return getG2tTrack(&c,g2ttrk,fraction,ntrk,order,1);
2118 return getG2tTrack(c,g2ttrk,fraction,ntrk,order,0);
2121 const g2t_track_st* StFcsDb::getPrimaryG2tTrack(
StFcsCluster* c, g2t_track_st* g2ttrk,
float& fraction,
int& ntrk,
unsigned int order){
2122 return getG2tTrack(c,g2ttrk,fraction,ntrk,order,1);
2125 const g2t_track_st* StFcsDb::getG2tTrack(
StFcsCluster* c, g2t_track_st* g2ttrk,
float& fraction,
int& ntrk,
unsigned int order,
int mode){
2127 vector<pair<unsigned int, float>> parents;
2129 for(
const pair<unsigned int, float> & gt :
hit->getGeantTracks()){
2132 case 0:
id=gt.first;
break;
2137 for(pair<unsigned int, float>& p : parents){
2138 if(p.first ==
id) {p.second += de; found=1;
break;}
2140 if(found==0) parents.push_back(make_pair(
id,de));
2144 ntrk=parents.size();
2145 if(order >= ntrk) {fraction=0;
return 0;}
2146 std::nth_element(parents.begin(), parents.begin()+order, parents.end(),
2147 [](
const pair<unsigned int,float>&a,
const pair<unsigned int,float>&b){
2148 return b.second < a.second;
2150 fraction = parents[order].second / detot;
2152 for(
unsigned int jtrk=0; jtrk<ntrk; jtrk++){
2153 LOG_INFO << Form(
"Cluster's G2T Track %3d mode=%1d id=%3d dE=%f",jtrk,mode,parents[jtrk].first,parents[jtrk].second)<<endm;
2156 return &g2ttrk[parents[order].first-1];
int getColumnNumber(int det, int id) const
get the row number for the channel
void setPedestal(int ehp, int ns, int dep, int ch, float ped)
get Pedestal
void printHeader3(FILE *f)
Map header.
void makePPMap()
Generate maps (this is the origin of the map)
void makeMap2019()
cable jacket color
void getIdfromEPD(int pp, int tt, int &det, int &id)
Map header.
void printHeader(FILE *f, int flag, int csv)
Print maps.
float pedestal(int ehp, int ns, int dep, int ch)
Get EPD's EPD map from FCS mapping.
StLorentzVectorD getLorentzVector(const StThreeVectorD &xyz, float energy, float zVertex=0.0)
Get get 4 vector assuing m=0 and taking beamline from DB.
int getZeroSuppression(int det) const
fcsGain/GainCorrection related
float getGainCorrection(int det, int id) const
get the gain for the channel for 8 timebin sum
void setFcsPresGain(fcsPresGain_st *)
set fcsHcalGain_st*
int getRowNumber(int det, int id) const
maximum number of id
float getEta(int det, float FcsX, float FcsY, float FcsZ=-1.0, float zVertex=0.0) const
get the STAR frame pseudo rapidity from the vertex from local X/Y [cm]
int jacketColor(int ehp, int ns, int dep, int ch)
Generate Patchpanel map.
static int getDetFromName(const std::string &detname)
Get det/id from name.
float getPhi(int det, float FcsX, float FcsY, float FcsZ=-1.0) const
get the STAR frame phi angle from from local X/Y [cm]
void setFcsPresValley(fcsPresValley_st *)
set fcsHcalGainCorr_st*
void setFcsHcalGain(fcsHcalGain_st *)
set fcsEcalGain_st*
StThreeVectorD projectLine(int det, StThreeVectorD &linedirection, StThreeVectorD &lineorigin, double showermaxz=-1) const
Like #projectLine(det, double*, double*, double) except use StThreeVectorD for line direction and ori...
int northSouth(int det) const
Ecal=0, Hcal=1, Pres=2.
void getName(int det, int id, char name[])
get the DEP/ch id
void setLeakyHcal(int v=1)
set run19 geometry, otherwise final run21
StThreeVectorD getDetectorOffset(int det, double zdepth=-1) const
Utility functions related to DetectorPosition.
int detectorId(int eh, int ns) const
6
double getHcalProjectedToEcalX(int ns, double hcalLocalX, double zvtx=0.0)
Project Hcal local X to Ecal local X [cm].
const g2t_track_st * getParentG2tTrack(StFcsHit *h, g2t_track_st *g2ttrk, float &fraction, int &ntrk, unsigned int order=0)
float getSamplingFraction(int det) const
get zero suppression threshold
StThreeVectorD getStarXYZfromColumnRow(int det, float col, float row, float FcsZ=-1.0) const
get the STAR frame cooridnates from other way
void readPedFromText(const char *file="fcsped.txt")
setting pedestal
void getIdfromDep(int ehp, int ns, int dep, int ch, int &detectorId, int &id, int &crt, int &slt) const
Get DEP map.
void setRun19(int v=1)
set run#
StThreeVectorD projectTrackToEcal(const g2t_track_st *g2ttrk, const g2t_vertex_st *g2tvert=0) const
project a g2t track to Ecal with a given track and vertex. If no vertex given assume a vertex of (0...
float getZDepth(int det) const
get the Y width of the cell
void printHeader4(FILE *f, int flag)
Map header.
float getXWidth(int det) const
get the angle of the detector
float getGain8(int det, int id) const
get the gain for the channel for 16 timebin sum
void setFcsEcalGainCorr(fcsEcalGainCorr_st *)
set fcsPresGain_st*
void getLocalXYinCell(StFcsHit *hit, float &x, float &y) const
getting XY in local cell coordinate
StThreeVectorD getStarXYZ(int det, float FcsX, float FcsY, float FcsZ=-1.0, float zVertex=0.0) const
get the STAR frame cooridnates from local XYZ [cm]
void setRun(int run)
enable(1) or disable(0) offline DB access
void setFcsEcalGain(fcsEcalGain_st *)
set fcsDetectorPosition_st*
void getEPDfromId(int det, int id, int &pp, int &tt)
Get FCS's EPD map foom EPD mapping.
int ecalHcalPres(int det) const
Ecal North=0, Ecal South=1, Hcal North=2, Hcal South=3, Pres=4/5.
float getGain(int det, int id) const
get sampling fraction
int maxDetectorId() const
set fcsPresValley_st*
void setDbAccess(int v=1)
debug level
StThreeVectorD projectTrackToEcalSMax(const g2t_track_st *g2ttrk, const g2t_vertex_st *g2tvert=0) const
SMax = Shower Max Z.
static unsigned short getKey(unsigned short detid, unsigned short id)
Get det from name.
float getPresValley(int det, int id) const
get the gain correction for the channel
float getDetectorAngle(int det) const
This is the vector normal to the detector plane.
void printHeader2(FILE *f)
Map header.
int getNDep(int ehp, int ns) const
Get Det map.
void printMap()
Generate map for run19.
int getDepCh(int dep, int ch) const
get the id from row/col
StThreeVectorD projectTrack(int det, const g2t_track_st *g2ttrk, const g2t_vertex_st *g2tvert, double showermaxz=-1) const
Generic g2t track projection function but #det and #showermaxz needs to be specified; if #det or #sho...
int maxId(int det) const
number of column
void makeMap()
Get Id from SC.
void getIdfromSCmap(int ehp, int ns, int scdep, int branch, int fee_i2c, int sipm, int &det, int &id) const
Get SC map.
void getSCmap(int det, int id, int &ehp, int &ns, int &scdep, int &branch, int &fee_i2c, int &sipm, int &pp, int &jacket) const
of DEP
int getId(int det, int row, int col) const
get the column number for the channel
int nRow(int det) const
north or south side
StThreeVectorD projectTrackToHcal(const g2t_track_st *g2ttrk, const g2t_vertex_st *g2tvert=0) const
project a g2t track to Hcal with a given track and vertex. If no vertex given assume a vertex of (0...
void setFcsDetectorPosition(fcsDetectorPosition_st *t)
set leaky Hcal
int nColumn(int det) const
number of rows
unsigned int backTraceG2tTrack(unsigned int id, g2t_track_st *g2ttrk)
reading pedestal from text
static void getFromName(const char name[], int &det, int &id)
Get Name of a channel.
void printEtGain()
ET gain.
StThreeVectorD getStarXYZ_4x4(int det, int col, int row) const
Get the STAR frame cooridnates for 4x4 sum.
StThreeVectorD projectTrackToHcalSMax(const g2t_track_st *g2ttrk, const g2t_vertex_st *g2tvert=0) const
SMax = Shower Max Z.
void setFcsHcalGainCorr(fcsHcalGainCorr_st *)
set fcsEcalGainCorr_st*
float getYWidth(int det) const
get the X width of the cell
double getHcalProjectedToEcalY(int ns, double hcalLocalY, double zvtx=0.0)
Project Hcal local Y to Ecal local Y [cm].
void getDepfromId(int detectorId, int id, int &ehp, int &ns, int &crt, int &slt, int &dep, int &ch) const
print ET gain
double getProjectedDistance(StFcsCluster *ecal, StFcsCluster *hcal, double zvtx=0.0)
Project Hcal cluster to Ecal plane and get distance from Ecal cluster [cm].