@@ -999,6 +999,21 @@ Float_t St_TpcAvgCurrentC::AcCharge(Int_t sector, Int_t channel) {
999999 return (sector > 0 && sector <= 24 && channel > 0 && channel <= 8 ) ?
10001000 Struct ()->AcCharge [8 *(sector-1 )+channel-1 ] : 0 ;
10011001}
1002+ #include " St_itpcRDOMapC.h"
1003+ MakeChairInstance2 (tpcRDOMap,St_itpcRDOMapC,Calibrations/tpc/itpcRDOMap);
1004+ // ________________________________________________________________________________
1005+ Int_t St_itpcRDOMapC::rdo (Int_t padrow, Int_t pad) const {
1006+ Int_t rdo = 0 ;
1007+ Int_t N = nrows (0 );
1008+ for (Int_t i = 0 ; i < N; i++) {
1009+ if (padrow != row (i)) continue ;
1010+ if (pad < padMin (i) || pad > padMax (i)) continue ;
1011+ rdo = rdoI (i);
1012+
1013+ break ;
1014+ }
1015+ return rdo;
1016+ }
10021017#include " St_tpcRDOMapC.h"
10031018MakeChairInstance (tpcRDOMap,Calibrations/tpc/tpcRDOMap);
10041019// ________________________________________________________________________________
@@ -1014,6 +1029,17 @@ Int_t St_tpcRDOMapC::rdo(Int_t padrow, Int_t pad) const {
10141029 }
10151030 return rdo;
10161031}
1032+ // ________________________________________________________________________________
1033+ Int_t St_tpcRDOMapC::rdo (Int_t sector, Int_t padrow, Int_t pad) const {
1034+ if (St_tpcPadConfigC::instance ()->iTpc (sector)) {
1035+ Int_t N40 = St_tpcPadConfigC::instance ()->innerPadRows (sector);
1036+ if (padrow <= N40) {
1037+ return St_itpcRDOMapC::instance ()->rdo (padrow,pad);
1038+ }
1039+ return St_tpcRDOMapC::instance ()->rdo (padrow-N40+13 ,pad) + 2 ;
1040+ }
1041+ return rdo (padrow, pad);
1042+ }
10171043#include " St_tpcRDOT0offsetC.h"
10181044MakeChairInstance (tpcRDOT0offset,Calibrations/tpc/tpcRDOT0offset);
10191045Float_t St_tpcRDOT0offsetC::T0 (Int_t sector, Int_t padrow, Int_t pad) const {
@@ -1105,24 +1131,44 @@ starClockOnl_st *St_starClockOnlC::Struct(Int_t i) {
11051131MakeChairInstance (starMagOnl,RunLog/onl/starMagOnl);
11061132#include " St_beamInfoC.h"
11071133MakeChairInstance (beamInfo,RunLog/onl/beamInfo);
1134+ // ________________________________________________________________________________
11081135#include " St_tpcRDOMasksC.h"
11091136MakeChairInstance (tpcRDOMasks,RunLog/onl/tpcRDOMasks);
11101137// ________________________________________________________________________________
1111- UInt_t St_tpcRDOMasksC::getSectorMask (UInt_t sector ) {
1138+ UInt_t St_tpcRDOMasksC::getSectorMask (UInt_t sec ) {
11121139 UInt_t MASK = 0x0000 ; // default is to mask it out
11131140 // UInt_t MASK = 0xFFFF; // change to ON by default ** THIS WAS A HACK
1114- if (sector < 1 || sector > 24 || getNumRows () == 0 ){
1141+ if (sec < 1 || sec > 24 || getNumRows () == 0 ){
11151142 LOG_WARN << " St_tpcRDOMasksC:: getSectorMask : return default mask for "
1116- << " sector= " << sector << " getNumRows()=" << getNumRows () << endm;
1143+ << " sector= " << sec << " getNumRows()=" << getNumRows () << endm;
11171144 return MASK;
11181145 }
1119- MASK = mask (((sector + 1 ) / 2 ) - 1 ); // does the mapping from sector 1-24 to packed sectors
1120- if ( sector % 2 == 0 ){ // if its even relevent bits are 6-11
1121- MASK = MASK >> 6 ;
1146+ // tpcRDOMasks_st *row = Struct();
1147+ // Take care about unsorted tpcRDOMaks table
1148+ Int_t i = -1 ;
1149+ UInt_t j = (sec + 1 ) / 2 - 1 ;
1150+ for (i = 0 ; i < 12 ; i++) {
1151+ if (sector (i) == 2 *j + 1 ) {break ;}
1152+ }
1153+ assert (i >= 0 );
1154+ // MASK = mask(((sec + 1) / 2) - 1); // does the mapping from sector 1-24 to packed sectors
1155+ MASK = mask (i); // does the mapping from sector 1-24 to packed sectors
1156+ if (runNumber () <= 19000000 || (runNumber () < 20000000 && sec != 20 )) {// no iTPC
1157+ if (sec == 16 && MASK == 0 && runNumber () > 8181000 && runNumber () < 9181000 ) MASK = 4095 ;
1158+ if ( sec % 2 == 0 ){ // if its even relevent bits are 6-11
1159+ MASK = MASK >> 6 ;
1160+ }
1161+ // Otherwise want lower 6 bits
1162+ MASK &= 0x000003F ; // Mask out higher order bits
1163+ } else if (runNumber () < 20000000 && sec == 20 ) { // Run XVIII, sector 20
1164+ MASK = 255 ;
1165+ } else { // Run XIX and higher
1166+ if ( sec % 2 == 0 ){ // if its even relevent bits are 8-13
1167+ MASK = MASK >> 8 ;
1168+ }
1169+ // Otherwise want lower 6 bits
1170+ MASK &= 255 ; // Mask out higher order bits
11221171 }
1123- // Otherwise want lower 6 bits
1124- MASK &= 0x000003F ; // Mask out higher order bits
1125- if (sector == 16 && MASK == 0 && runNumber () > 8181000 && runNumber () < 9181000 ) MASK = 4095 ;
11261172 return MASK;
11271173}
11281174// ________________________________________________________________________________
0 commit comments