/// \author: Laurent Aphecetche and Diego Stocco, Subatech
//-----------------------------------------------------------------------------
+using std::cout;
+using std::endl;
/// \cond CLASSIMP
ClassImp(AliMpDCSNamer)
/// \endcond
const char* AliMpDCSNamer::fgkDCSSwitchSt345Pattern = "MchDE%04dsw%d.inValue";
+const char* AliMpDCSNamer::fgkDCSChannelTriggerPatternRead[] = {"MTR_%3sSIDE_MT%2i_RPC%i_HV.%14s", "MTR_%2sSIDE_MT%2i_RPC%i_HV.%14s"};
const char* AliMpDCSNamer::fgkDCSChannelTriggerPattern[] = {"MTR_%3sSIDE_MT%2i_RPC%i_HV.%s", "MTR_%2sSIDE_MT%2i_RPC%i_HV.%s"};
const char* AliMpDCSNamer::fgkDCSSideTriggerName[] = { "OUT", "IN" };
const char* AliMpDCSNamer::fgkDCSMeasureName[] = { "vEff", "actual.iMon" };
}
else if ( side == 1 ) // right -> Inside
{
- de = (13 + dcsNumber) % nofDE;
+ if (nofDE>0)
+ de = (13 + dcsNumber) % nofDE;
}
}
}
else {
side = 1;
- dcsNumber = (5 + dcsNumber) % nofDE;
+ if (nofDE>0)
+ dcsNumber = (5 + dcsNumber) % nofDE;
}
AliDebug(10, Form("detElemId %i -> MT%i_side%i_L%i", detElemId, chId, side, dcsNumber));
}
//_____________________________________________________________________________
-const char*
- AliMpDCSNamer::DCSChannelName(Int_t detElemId, Int_t sector, Int_t dcsMeasure) const
+const char*
+AliMpDCSNamer::DCSChannelNameFromAlias(const char* dcsAliasName) const
{
- /// Return the alias name of the DCS Channel for a given DCS area
- /// \param detElemId
- /// \param sector = 0,1 or 2 for St12, and is unused for st345 and trigger
- /// \param dcsMeasure = kDCSHV, kDCSI and is unused for tracker
+ /// Convert an AliasName to a ChannelName.
+ /// This method is needed because there is, for MCH, a -1 offset
+ /// between channel and alias name for some
+ /// unknown reason deeply rooted in DCS ???)
+ ///
+ /// \param dcsAliasName
+
+ Int_t detElemId = DetElemIdFromDCSAlias(dcsAliasName);
Int_t chamberId = AliMpDEManager::GetChamberId(detElemId);
if ( chamberId < 0 ) return 0x0;
-
+
Int_t side(-1), chId(-1);
Int_t dcsNumber = DetElemId2DCS(detElemId,side,chId);
-
+ Int_t index = DCSIndexFromDCSAlias(dcsAliasName);
+
switch (AliMpDEManager::GetStationType(detElemId))
{
case AliMp::kStation12:
- return Form(fgkDCSChannelSt12Pattern[side],chamberId,dcsNumber,sector);
+ return Form(fgkDCSChannelSt12Pattern[side],chamberId+1,dcsNumber+1,index+1);
break;
case AliMp::kStation345:
- return Form(fgkDCSChannelSt345Pattern[side],chamberId,dcsNumber);
+ return Form(fgkDCSChannelSt345Pattern[side],chamberId+1,dcsNumber+1);
break;
case AliMp::kStationTrigger:
- return Form(fgkDCSChannelTriggerPattern[side],fgkDCSSideTriggerName[side],chId,dcsNumber,fgkDCSMeasureName[dcsMeasure]);
+ return dcsAliasName;
break;
default:
return 0x0;
}
}
+//_____________________________________________________________________________
+const char*
+AliMpDCSNamer::DCSAliasName(Int_t detElemId, Int_t sector, Int_t dcsMeasure) const
+{
+ /// Return the alias name of the DCS Channel for a given DCS area
+ /// \param detElemId
+ /// \param sector = 0,1 or 2 for St12, and is unused for st345 and trigger
+ /// \param dcsMeasure = kDCSHV, kDCSI and is unused for tracker
+
+ Int_t chamberId = AliMpDEManager::GetChamberId(detElemId);
+ if ( chamberId < 0 ) return 0x0;
+
+ Int_t side(-1), chId(-1);
+ Int_t dcsNumber = DetElemId2DCS(detElemId,side,chId);
+
+ switch (AliMpDEManager::GetStationType(detElemId))
+ {
+ case AliMp::kStation12:
+ return Form(fgkDCSChannelSt12Pattern[side],chamberId,dcsNumber,sector);
+ break;
+ case AliMp::kStation345:
+ return Form(fgkDCSChannelSt345Pattern[side],chamberId,dcsNumber);
+ break;
+ case AliMp::kStationTrigger:
+ return Form(fgkDCSChannelTriggerPattern[side],fgkDCSSideTriggerName[side],chId,dcsNumber,fgkDCSMeasureName[dcsMeasure]);
+ break;
+ default:
+ return 0x0;
+ break;
+ }
+}
+
//_____________________________________________________________________________
const char*
-AliMpDCSNamer::DCSSwitchName(Int_t detElemId, Int_t pcbNumber) const
+AliMpDCSNamer::DCSSwitchAliasName(Int_t detElemId, Int_t pcbNumber) const
{
/// Return the alias name of the DCS Switch for a given PCB
/// within a slat of St345
}
else if ( sDcsAlias.Contains("MT") )
{
- sscanf(sDcsAlias.Data(),fgkDCSChannelTriggerPattern[side],cside,&n1,&n3,type);
+ sscanf(sDcsAlias.Data(),fgkDCSChannelTriggerPatternRead[side],cside,&n1,&n3,type);
detElemId = DCS2DE(n1,side,n3);
AliDebug(1,Form("Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
}
case AliMp::kStation12:
for ( int sector = 0; sector < 3; ++sector)
{
- aliases->Add(new TObjString(DCSChannelName(detElemId,sector)));
+ aliases->Add(new TObjString(DCSAliasName(detElemId,sector)));
}
break;
case AliMp::kStation345:
- aliases->Add(new TObjString(DCSChannelName(detElemId)));
+ aliases->Add(new TObjString(DCSAliasName(detElemId)));
for ( Int_t i = 0; i < NumberOfPCBs(detElemId); ++i )
{
- aliases->Add(new TObjString(DCSSwitchName(detElemId,i)));
+ aliases->Add(new TObjString(DCSSwitchAliasName(detElemId,i)));
}
break;
default:
{
case AliMp::kStationTrigger:
AliDebug(10,Form("Current DetElemId %i",detElemId));
- aliases->Add(new TObjString(DCSChannelName(detElemId,0,iMeas)));
+ aliases->Add(new TObjString(DCSAliasName(detElemId,0,iMeas)));
break;
default:
break;
/// Returns the index of PCB (within a St345 slat) for a given manu number.
/// Returns -1 if (detElemId,manuId) is incorrect
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
const AliMpSlat* slat
= AliMpSegmentation::Instance()->GetSlatByElectronics(detElemId, manuId);
{
/// Return the DCS-sector number (within a St12 quadrant) for a given manu number.
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
const AliMpSector* sector
= AliMpSegmentation::Instance()->GetSectorByElectronics(detElemId, manuId);
if ( x < -140 ) AliFatal("");
if ( x < 283.75 ) isector = 0;
- else if ( x < 603.75 ) isector = 1;
+ else if ( x < 606.25 ) isector = 1;
else if ( x < 1158.75 ) isector = 2;
}