/*
*/
// from AliEMCALGeoParams.h
static const int fgkEMCALRows = 24; // number of rows per module for EMCAL
static const int fgkEMCALCols = 48; // number of columns per module for EMCAL
//____________________________________________________________________
void WriteOCDBCalibMapAPD(const char * inputDBName, const char * inputMapName,
const char * outputFileName, const int swapSides)
{
gSystem->Load("AliEMCALCalibAPD_cxx");
AliEMCALCalibAPD *calibAPD = new AliEMCALCalibAPD();
calibAPD->ReadCalibAPDInfo(10000, inputDBName);
int fNCalibAPD = calibAPD->GetNCalibAPD();
AliEMCALCalibAPD::AliEMCALCalibAPDData * fCalib = calibAPD->GetCalibAPDData();
gSystem->Load("AliEMCALMapAPD_cxx");
AliEMCALMapAPD *mapAPD = new AliEMCALMapAPD();
// assume we do this for one SuperModule at a time; can merge the
// output files with 'cat' or so separately
int nSM = 1;
mapAPD->ReadMapAPDInfo(nSM, inputMapName);
AliEMCALMapAPD::AliEMCALSuperModuleMapAPD * fMap = mapAPD->GetSuperModuleData();
// set up ouput file
ofstream outputFile(outputFileName);
// let's loop over the files..
int nFound = 0;
int nNotFound = 0;
int iCol = 0;
int iRow = 0;
for (int icol=0; icol<fgkEMCALCols; icol++) {
for (int irow=0; irow<fgkEMCALRows; irow++) {
iCol = icol;
iRow = irow;
if (swapSides) {
// C side, oriented differently than A side: swap is requested
iCol = fgkEMCALCols-1 - iCol;
iRow = fgkEMCALRows-1 - iRow;
}
int apdMap = fMap[0].fAPDNum[icol][irow]; // 0 = nSM - 1
int i = 0;
int apdCalib = -1;
while (i<fNCalibAPD && apdMap!=apdCalib) {
apdCalib = fCalib[i].fAPDNum;
i++;
}
if (apdCalib == apdMap) { // found!
i--; // go back to what we found
// should also calculate the HardWare Id.. note that the functionality
// of the Tower2FEEMap and GetHardWareId calls have not been tested here..
int ircu, ibranch, card, icsp;
Tower2FEEMap(icol, irow, &ircu, &ibranch, &card, &icsp);
int iHW = GetCSPAddress(ibranch, card, icsp);
iHW |= (ircu << 12); // RCU not part of normal HW addresses, but we add an extra bit for it here, just in case it might be useful
// print some info..
outputFile << iCol << " " << iRow << " " << iHW
<< " " << fCalib[i].fAPDNum << " " << fCalib[i].fV30
<< " " << fCalib[i].fPar[0] << " " << fCalib[i].fPar[1] << " " << fCalib[i].fPar[2]
<< " " << fCalib[i].fParErr[0] << " " << fCalib[i].fParErr[1] << " " << fCalib[i].fParErr[2]
<< " " << fCalib[i].fBreakDown << " " << fCalib[i].fDarkCurrent << endl;
nFound++;
}
else {
cout << " APD " << apdMap << " could not be found! " << endl;
// print some dummy info
nNotFound++;
}
}
}
cout << " found " << nFound << " matches " << endl;
cout << " did not find " << nNotFound << " APDs " << endl;
// close down
outputFile.close();
}
// from AliEMCALGeoParams.h:
Int_t GetCSPAddress(Int_t iBranch, Int_t iFEC, Int_t iCSP) const
{ return ( (iBranch<<11) | (iFEC<<7) | iCSP ); }; //
// from DCSGenerateAPD.C; the method assumes that the columns and rows
// are labelled as we have them on the A side (normal case for calibrations
// before the installation)
const int NRCU = 2; // per SM
const int NBranch = 2; // per RCU
const int NFEC = 9; // per branch, labelled 1..9
const int NCSP = 32; // per FEC
void Tower2FEEMap(const int icol, const int irow,
int *ircu, int *ibranch, int *card, int *icsp)
{ /*
If you are interested in where these magic numbers come from -
See mapping info on
http://dsilverm.web.cern.ch/dsilverm/mapping/emcal_mapping.html
http://dsilverm.web.cern.ch/dsilverm/mapping/ppt/Coordinates_and_Mapping.pdf */
// each FEC covers a 4x8 tower area
int C = irow/8; // Cable bundle
int FEC = C*12 + icol/4; // FEC in 0..35 range
*ircu = FEC / 18; // 18 FEC per RCU
*ibranch = (FEC%18) / 9;
*card = FEC % 9;
// columns and rows within an FEC area
int tCol = icol%4;
int tRow = irow%8;
// The mapping to CSP is a bit complicated so I also define two more help variables here..
// which T-card?
int TCard = tCol/2; // 0=Top (even StripModules), 1=Bottom (odd StripModules)
int locCol = tCol%2; // local column inside T-card
*icsp = (7 - tRow) + locCol*16 + TCard*8;
}
WriteOCDBCalibMapAPD.C:10 WriteOCDBCalibMapAPD.C:11 WriteOCDBCalibMapAPD.C:12 WriteOCDBCalibMapAPD.C:13 WriteOCDBCalibMapAPD.C:14 WriteOCDBCalibMapAPD.C:15 WriteOCDBCalibMapAPD.C:16 WriteOCDBCalibMapAPD.C:17 WriteOCDBCalibMapAPD.C:18 WriteOCDBCalibMapAPD.C:19 WriteOCDBCalibMapAPD.C:20 WriteOCDBCalibMapAPD.C:21 WriteOCDBCalibMapAPD.C:22 WriteOCDBCalibMapAPD.C:23 WriteOCDBCalibMapAPD.C:24 WriteOCDBCalibMapAPD.C:25 WriteOCDBCalibMapAPD.C:26 WriteOCDBCalibMapAPD.C:27 WriteOCDBCalibMapAPD.C:28 WriteOCDBCalibMapAPD.C:29 WriteOCDBCalibMapAPD.C:30 WriteOCDBCalibMapAPD.C:31 WriteOCDBCalibMapAPD.C:32 WriteOCDBCalibMapAPD.C:33 WriteOCDBCalibMapAPD.C:34 WriteOCDBCalibMapAPD.C:35 WriteOCDBCalibMapAPD.C:36 WriteOCDBCalibMapAPD.C:37 WriteOCDBCalibMapAPD.C:38 WriteOCDBCalibMapAPD.C:39 WriteOCDBCalibMapAPD.C:40 WriteOCDBCalibMapAPD.C:41 WriteOCDBCalibMapAPD.C:42 WriteOCDBCalibMapAPD.C:43 WriteOCDBCalibMapAPD.C:44 WriteOCDBCalibMapAPD.C:45 WriteOCDBCalibMapAPD.C:46 WriteOCDBCalibMapAPD.C:47 WriteOCDBCalibMapAPD.C:48 WriteOCDBCalibMapAPD.C:49 WriteOCDBCalibMapAPD.C:50 WriteOCDBCalibMapAPD.C:51 WriteOCDBCalibMapAPD.C:52 WriteOCDBCalibMapAPD.C:53 WriteOCDBCalibMapAPD.C:54 WriteOCDBCalibMapAPD.C:55 WriteOCDBCalibMapAPD.C:56 WriteOCDBCalibMapAPD.C:57 WriteOCDBCalibMapAPD.C:58 WriteOCDBCalibMapAPD.C:59 WriteOCDBCalibMapAPD.C:60 WriteOCDBCalibMapAPD.C:61 WriteOCDBCalibMapAPD.C:62 WriteOCDBCalibMapAPD.C:63 WriteOCDBCalibMapAPD.C:64 WriteOCDBCalibMapAPD.C:65 WriteOCDBCalibMapAPD.C:66 WriteOCDBCalibMapAPD.C:67 WriteOCDBCalibMapAPD.C:68 WriteOCDBCalibMapAPD.C:69 WriteOCDBCalibMapAPD.C:70 WriteOCDBCalibMapAPD.C:71 WriteOCDBCalibMapAPD.C:72 WriteOCDBCalibMapAPD.C:73 WriteOCDBCalibMapAPD.C:74 WriteOCDBCalibMapAPD.C:75 WriteOCDBCalibMapAPD.C:76 WriteOCDBCalibMapAPD.C:77 WriteOCDBCalibMapAPD.C:78 WriteOCDBCalibMapAPD.C:79 WriteOCDBCalibMapAPD.C:80 WriteOCDBCalibMapAPD.C:81 WriteOCDBCalibMapAPD.C:82 WriteOCDBCalibMapAPD.C:83 WriteOCDBCalibMapAPD.C:84 WriteOCDBCalibMapAPD.C:85 WriteOCDBCalibMapAPD.C:86 WriteOCDBCalibMapAPD.C:87 WriteOCDBCalibMapAPD.C:88 WriteOCDBCalibMapAPD.C:89 WriteOCDBCalibMapAPD.C:90 WriteOCDBCalibMapAPD.C:91 WriteOCDBCalibMapAPD.C:92 WriteOCDBCalibMapAPD.C:93 WriteOCDBCalibMapAPD.C:94 WriteOCDBCalibMapAPD.C:95 WriteOCDBCalibMapAPD.C:96 WriteOCDBCalibMapAPD.C:97 WriteOCDBCalibMapAPD.C:98 WriteOCDBCalibMapAPD.C:99 WriteOCDBCalibMapAPD.C:100 WriteOCDBCalibMapAPD.C:101 WriteOCDBCalibMapAPD.C:102 WriteOCDBCalibMapAPD.C:103 WriteOCDBCalibMapAPD.C:104 WriteOCDBCalibMapAPD.C:105 WriteOCDBCalibMapAPD.C:106 WriteOCDBCalibMapAPD.C:107 WriteOCDBCalibMapAPD.C:108 WriteOCDBCalibMapAPD.C:109 WriteOCDBCalibMapAPD.C:110 WriteOCDBCalibMapAPD.C:111 WriteOCDBCalibMapAPD.C:112 WriteOCDBCalibMapAPD.C:113 WriteOCDBCalibMapAPD.C:114 WriteOCDBCalibMapAPD.C:115 WriteOCDBCalibMapAPD.C:116 WriteOCDBCalibMapAPD.C:117 WriteOCDBCalibMapAPD.C:118 WriteOCDBCalibMapAPD.C:119 WriteOCDBCalibMapAPD.C:120 WriteOCDBCalibMapAPD.C:121 WriteOCDBCalibMapAPD.C:122 WriteOCDBCalibMapAPD.C:123 WriteOCDBCalibMapAPD.C:124 WriteOCDBCalibMapAPD.C:125 WriteOCDBCalibMapAPD.C:126 WriteOCDBCalibMapAPD.C:127 WriteOCDBCalibMapAPD.C:128 WriteOCDBCalibMapAPD.C:129