32 #include <Riostream.h> 34 #include <TObjArray.h> 35 #include <TObjString.h> 56 {
"MchHvLvLeft/Chamber%02dLeft/Slat%02d.actual.vMon",
57 "MchHvLvRight/Chamber%02dRight/Slat%02d.actual.vMon" 62 "MchHvLvLeft/Chamber%02dLeft/Quad%dSect%d.actual.vMon",
63 "MchHvLvRight/Chamber%02dRight/Quad%dSect%d.actual.vMon" 68 "MchHvLvLeft/Chamber%02dLeft/Quad%d",
69 "MchHvLvRight/Chamber%02dRight/Quad%d" 75 "MchHvLvLeft/Chamber%02dLeft",
76 "MchHvLvRight/Chamber%02dRight" 82 "MchHvLvLeft/Chamber%02dLeft/Group%d%s.MeasurementSenseVoltage",
83 "MchHvLvRight/Chamber%02dRight/Group%d%s.MeasurementSenseVoltage" 127 TString sDetName(detName);
135 AliWarning(
"Detector name must be either tracker or trigger. Default tracker selected");
148 ofstream out(ldiffile);
158 out <<
"#" << detName.Data() <<
" config" << endl
159 <<
"dn: det=" << detName.Data() <<
",o=alice,dc=cern,dc=ch" << endl
160 <<
"objectClass: AliShuttleDetector" << endl
161 <<
"det: " << detName.Data() << endl
162 <<
"StrictRunOrder: 1" << endl
163 <<
"responsible: aphecetc@in2p3.fr" << endl
164 <<
"DCSHost: aldcs053.cern.ch" << endl
165 <<
"DCSPort: 4242" <<endl;
167 while ( ( s = (TObjString*)(next()) ) )
169 out <<
"DCSalias: " << s->String().Data() << endl;
191 a->Add(
new TObjString(
"MchHvLvRight/Chamber[00..03]Right/Quad0Sect[0..2].actual.vMon"));
192 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[00..03]Left/Quad1Sect[0..2].actual.vMon"));
193 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[00..03]Left/Quad2Sect[0..2].actual.vMon"));
194 a->Add(
new TObjString(
"MchHvLvRight/Chamber[00..03]Right/Quad3Sect[0..2].actual.vMon"));
198 a->Add(
new TObjString(
"MchHvLvRight/Chamber[04..09]Right/Slat[00..08].actual.vMon"));
199 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[04..09]Left/Slat[00..08].actual.vMon"));
201 a->Add(
new TObjString(
"MchHvLvRight/Chamber[06..09]Right/Slat[09..12].actual.vMon"));
202 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[06..09]Left/Slat[09..12].actual.vMon"));
208 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[01..10]Left/Group[1..4]dig.MeasurementSenseVoltage"));
209 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[01..10]Left/Group[1..4]ann.MeasurementSenseVoltage"));
210 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[01..10]Left/Group[1..4]anp.MeasurementSenseVoltage"));
211 a->Add(
new TObjString(
"MchHvLvRight/Chamber[01..10]Right/Group[1..4]dig.MeasurementSenseVoltage"));
212 a->Add(
new TObjString(
"MchHvLvRight/Chamber[01..10]Right/Group[1..4]ann.MeasurementSenseVoltage"));
213 a->Add(
new TObjString(
"MchHvLvRight/Chamber[01..10]Right/Group[1..4]anp.MeasurementSenseVoltage"));
217 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[05..06]Left/Group[5..5]dig.MeasurementSenseVoltage"));
218 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[05..06]Left/Group[5..5]ann.MeasurementSenseVoltage"));
219 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[05..06]Left/Group[5..5]anp.MeasurementSenseVoltage"));
220 a->Add(
new TObjString(
"MchHvLvRight/Chamber[05..06]Right/Group[5..5]dig.MeasurementSenseVoltage"));
221 a->Add(
new TObjString(
"MchHvLvRight/Chamber[05..06]Right/Group[5..5]ann.MeasurementSenseVoltage"));
222 a->Add(
new TObjString(
"MchHvLvRight/Chamber[05..06]Right/Group[5..5]anp.MeasurementSenseVoltage"));
225 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[07..10]Left/Group[5..7]dig.MeasurementSenseVoltage"));
226 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[07..10]Left/Group[5..7]ann.MeasurementSenseVoltage"));
227 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[07..10]Left/Group[5..7]anp.MeasurementSenseVoltage"));
228 a->Add(
new TObjString(
"MchHvLvRight/Chamber[07..10]Right/Group[5..7]dig.MeasurementSenseVoltage"));
229 a->Add(
new TObjString(
"MchHvLvRight/Chamber[07..10]Right/Group[5..7]ann.MeasurementSenseVoltage"));
230 a->Add(
new TObjString(
"MchHvLvRight/Chamber[07..10]Right/Group[5..7]anp.MeasurementSenseVoltage"));
235 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
236 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));
237 a->Add(
new TObjString(
"MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
238 a->Add(
new TObjString(
"MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));
240 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
241 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
242 a->Add(
new TObjString(
"MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
243 a->Add(
new TObjString(
"MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
258 a->Add(
new TObjString(Form(
"MchDE%04dsw[0..%d].inValue",detElemId,
NumberOfPCBs(detElemId)-1)));
280 Int_t chamberId = chId;
286 Int_t half = nofDE/2;
288 dcsNumber = half - dcsNumber;
290 Int_t quarter = nofDE/4;
291 Int_t threeQuarter = half + quarter;
295 de = threeQuarter + 1 - dcsNumber;
297 else if ( side == 1 )
299 if ( dcsNumber <= quarter )
301 de = dcsNumber + threeQuarter;
305 de = dcsNumber - quarter - 1;
311 if ( chId < 19 ) chamberId = chId - 1;
312 else chamberId = chId - 9;
320 else if ( side == 1 )
323 de = (13 + dcsNumber) % nofDE;
327 return (chamberId+1)*100 + de;
343 AliDebug(1,Form(
"DetElemId %d invalid",detElemId));
346 Int_t dcsNumber = (detElemId-(chamberId+1)*100);
374 Int_t quarter = nofDE/4;
376 Int_t half = nofDE/2;
378 Int_t threeQuarter = half + quarter;
382 if ( dcsNumber <= quarter )
384 dcsNumber += quarter + 1 ;
387 else if ( dcsNumber <= threeQuarter )
389 dcsNumber = ( threeQuarter - dcsNumber + 1 );
392 else if ( dcsNumber > threeQuarter )
394 dcsNumber = dcsNumber - threeQuarter;
402 dcsNumber = half-dcsNumber;
408 chId = chamberId + 1;
413 if ( dcsNumber >=5 && dcsNumber <= 13 ) {
415 dcsNumber = 14 - dcsNumber;
420 dcsNumber = (5 + dcsNumber) % nofDE;
422 AliDebug(10, Form(
"detElemId %i -> MT%i_side%i_L%i", detElemId, chId, side, dcsNumber));
438 TString salias(dcsAlias);
440 if ( !salias.Contains(
"MchHvLv") )
return dcsAlias;
441 if ( salias.Contains(
"Group"))
return dcsAlias;
443 Int_t quadrantNumber(-1);
444 Int_t chamberNumber(-1);
447 if ( salias.Contains(
"Left")) side = 0;
448 if ( salias.Contains(
"Right")) side = 1;
450 if ( side < 0 )
return "";
454 if ( salias.Contains(
"Slat") )
456 Int_t slatNumber(-1);
462 else if ( salias.Contains(
"Sect") )
464 Int_t sectorNumber(-1);
471 else if ( salias.Contains(
"Quad") )
478 else if ( salias.Contains(
"Chamber") )
485 if ( TString(dcsAlias).Contains(
"iMon") )
487 channelName.ReplaceAll(
"vMon",
"iMon");
499 TString sname(dcsName);
501 if ( !sname.Contains(
"MchHvLv") )
return dcsName;
502 if ( sname.Contains(
"Group"))
return dcsName;
504 Int_t quadrantNumber(-1);
505 Int_t chamberNumber(-1);
508 if ( sname.Contains(
"Left")) side = 0;
509 if ( sname.Contains(
"Right")) side = 1;
511 if ( side < 0 )
return "";
515 if ( sname.Contains(
"Slat") )
517 Int_t slatNumber(-1);
523 else if ( sname.Contains(
"Sect") )
525 Int_t sectorNumber(-1);
532 else if ( sname.Contains(
"Quad") )
539 else if ( sname.Contains(
"Chamber") )
546 if ( TString(dcsName).Contains(
"iMon") )
548 channelName.ReplaceAll(
"vMon",
"iMon");
556 Int_t &chamberNumber,
558 TString &voltageType)
const 564 if (!alias.BeginsWith(
"MchHvLvLeft") && !alias.BeginsWith(
"MchHvLvRight")) {
565 AliError(Form(
"alias %s does not start with the expected MchHvLvLeft or MchHvLvRight string",alias.Data()));
569 Int_t slash = alias.Index(
'/');
571 alias = alias(slash+1,alias.Length()-slash-1);
573 if (!alias.BeginsWith(
"Chamber")) {
574 AliError(Form(
"alias part %s does not start with the expected Chamber string",alias.Data()));
578 chamberNumber = TString(alias(TString(
"Chamber").Length(),2)).Atoi();
580 slash = alias.Index(
'/');
582 alias = alias(slash+1,alias.Length()-slash-1);
584 if (!alias.BeginsWith(
"Group")) {
585 AliError(Form(
"alias part %s does not start with the expected Group string",alias.Data()));
589 groupNumber = TString(alias(TString(
"Group").Length(),1)).Atoi();
591 int dot = alias.Index(
'.');
593 voltageType = alias(TString(
"Group").Length()+1,dot-TString(
"Group").Length()-1);
595 if ( voltageType !=
"anp" && voltageType !=
"ann" && voltageType !=
"dig") {
596 AliError(Form(
"alias part (voltageType) %s does not contain one of anp,ann or dig voltageType",alias.Data()));
610 TString salias(dcsAlias);
615 if (!salias.Contains(
"Group"))
623 if ( salias.Contains(
"Left"))
627 else if ( salias.Contains(
"Right"))
632 AliError(Form(
"unexpected alias=%s",salias.Data()));
636 Bool_t left = ( side == 0 );
638 Int_t chamberNumber, groupNumber;
643 if ( chamberNumber >= 1 && chamberNumber <= 4 )
646 if ( groupNumber == 1 )
659 else if ( groupNumber == 2 )
672 else if ( groupNumber == 3 )
685 else if ( groupNumber == 4 )
700 AliError(Form(
"Got incorrect group number=%d from alias=%s",groupNumber,salias.Data()));
704 numberOfDetectionElements=1;
705 detElemId =
new Int_t[numberOfDetectionElements];
706 detElemId[0] = chamberNumber*100 + deOffset;
708 else if ( chamberNumber >= 5 && chamberNumber <= 10 )
710 Int_t* dcsSlatNumber(0x0);
712 if ( chamberNumber >= 5 && chamberNumber <= 6 )
714 if ( groupNumber == 1 )
716 numberOfDetectionElements=3;
717 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
722 else if ( groupNumber == 5 )
724 numberOfDetectionElements=3;
725 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
730 else if ( groupNumber > 1 && groupNumber < 5 )
732 numberOfDetectionElements=1;
733 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
734 dcsSlatNumber[0]=groupNumber+2;
738 AliError(Form(
"Got incorrect group number=%d from alias=%s",groupNumber,salias.Data()));
742 else if ( chamberNumber >= 7 )
744 if ( groupNumber == 1 )
746 numberOfDetectionElements=4;
747 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
753 else if ( groupNumber == 7 )
755 numberOfDetectionElements=4;
756 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
762 else if ( groupNumber > 1 && groupNumber < 7 )
764 numberOfDetectionElements=1;
765 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
766 dcsSlatNumber[0]=groupNumber+3;
770 AliError(Form(
"Got incorrect group number=%d from alias=%s",groupNumber,salias.Data()));
775 detElemId =
new Int_t[numberOfDetectionElements];
776 for (
int i = 0; i < numberOfDetectionElements; ++i )
778 detElemId[i] =
DCS2DE(chamberNumber-1,side,dcsSlatNumber[i]-1);
783 AliError(Form(
"Got an invalid chamberNumber=%d from alias=%s",chamberNumber,salias.Data()));
796 if ( voltageType == -1 ) {
798 }
else if ( voltageType == 0 ) {
800 }
else if ( voltageType == 1 ) {
804 if ( !voltage.Length() )
806 AliError(Form(
"Incorrect voltageType=%d. Expected -1,0 or 1.",voltageType));
813 AliError(Form(
"Got an incorrect chamberId=%d from detElemId=%d",chamberId,detElemId));
816 Int_t stationId = 1 + chamberId / 2;
843 Int_t remnant = detElemId % 100;
865 Int_t dcsSlatNumber = 1 + dcsNumber;
866 if ( stationId == 3 ) {
867 switch (dcsSlatNumber) {
876 group = dcsSlatNumber - 2;
889 switch (dcsSlatNumber) {
901 group = dcsSlatNumber - 3;
920 AliError(Form(
"Could not get LV group id for detection element %d",detElemId));
941 if ( chamberId < 0 )
return "";
943 Int_t side(-1), chId(-1);
966 aliasName.ReplaceAll(
"vMon",
"iMon");
1001 TString sDcsAlias(dcsAlias);
1007 if ( sDcsAlias.Contains(
"Left") )
1011 else if ( sDcsAlias.Contains(
"Right") )
1026 if ( sDcsAlias.Contains(
"Quad") )
1049 AliDebug(1,Form(
"dcsAlias=%s",dcsAlias));
1051 TString sDcsAlias(dcsAlias);
1057 for(Int_t iside=0; iside<2; iside++){
1058 if ( sDcsAlias.Contains(sideName[iside]) ) {
1063 if(side<0)
return -2;
1072 if ( sDcsAlias.Contains(
"Slat") )
1075 detElemId =
DCS2DE(n1,side,n3);
1076 AliDebug(1,Form(
"Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
1078 else if ( sDcsAlias.Contains(
"Quad") )
1081 detElemId = 100*(n1+1) + n3;
1082 AliDebug(1,Form(
"Quad side=%d n1=%d n3=%d n4=%d de=%d",side,n1,n3,n4,detElemId));
1084 else if ( sDcsAlias.Contains(
"MT") )
1087 detElemId =
DCS2DE(n1,side,n3);
1088 AliDebug(1,Form(
"Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
1097 AliError(Form(
"Invalid aliasName %s",dcsAlias));
1109 TString sDcsAlias(dcsAlias);
1111 Int_t dcsMeasurement = -1;
1113 for(Int_t iMeas=0; iMeas<
kNDCSMeas; iMeas++){
1115 dcsMeasurement = iMeas;
1120 return dcsMeasurement;
1162 aliases->SetOwner(kTRUE);
1166 for(Int_t iMeas=0; iMeas<nMeasures; iMeas++){
1172 Int_t voltageType[] = { -1,0,1 };
1185 for (
int sector = 0; sector < 3; ++sector)
1188 aliases->Add(
new TObjString(
DCSAliasName(detElemId,sector)));
1197 for (
int pt = 0; pt < 2; ++pt )
1199 for (
int i = 0; i < 3; ++i )
1202 aliases->Add(
new TObjString(name));
1219 for (
int i = 0; i < 3; ++i )
1224 if (!aliases->FindObject(name))
1226 aliases->Add(
new TObjString(name));
1241 AliDebug(10,Form(
"Current DetElemId %i",detElemId));
1242 aliases->Add(
new TObjString(
DCSAliasName(detElemId,0,iMeas)));
1254 if (pattern && strlen(pattern)>0)
1258 tmp->SetOwner(kTRUE);
1259 for ( Int_t i = 0; i <= aliases->GetLast(); ++i )
1261 TString name =
static_cast<TObjString*
>(aliases->At(i))->String();
1262 if (name.Contains(pattern))
1264 tmp->Add(
new TObjString(name.Data()));
1302 if ( ! slat )
return -1;
1317 if ( ! sector )
return -1;
1325 Double_t x = lowerLeftX*10.0;
1334 if ( x < 291.65 ) isector = 0;
1335 else if ( x < 585.65 ) isector = 1;
1336 else if ( x < 879.65 ) isector = 2;
1342 if ( x < 283.75 ) isector = 0;
1343 else if ( x < 606.25 ) isector = 1;
1344 else if ( x < 1158.75 ) isector = 2;
1378 Bool_t isConsistent(kFALSE);
1379 TString requestInfo;
1385 requestInfo =
"TRACKER";
1389 requestInfo =
"TRIGGER";
1397 return isConsistent;
1407 const char* voltageTypeName[] = {
"ann",
"dig",
"anp"};
1408 Int_t voltageType[] = { -1,0,1 };
1411 for ( Int_t iv = 0; iv < 3; ++iv )
1413 for ( Int_t i = 0; i < aliases->GetEntries(); ++i )
1415 TString dcsAlias =
static_cast<TObjString*
>(aliases->At(i))->String();
1416 if ( !dcsAlias.Contains(voltageTypeName[iv]))
continue;
1418 Int_t* detElemId(0x0);
1419 Int_t numberOfDetectionElements(0);
1422 Bool_t ok =
DecodeDCSMCHLVAlias(dcsAlias.Data(), detElemId, numberOfDetectionElements, planeType);
1426 AliError(Form(
"Could not decode alias=%s",dcsAlias.Data()));
1431 for ( Int_t
id = 0;
id < numberOfDetectionElements; ++id )
1436 if (check!=dcsAlias)
1438 AliError(Form(
"%s != %s",check.Data(),dcsAlias.Data()));
1453 AliInfo(Form(
"%d aliases successfully tested",n));
static AliMq::Station12Type GetStation12Type(Int_t detElemId)
static Int_t NofChambers()
Return number of chambers.
static const char * fgkDCSChannelSt12Pattern[]
DCS Tracker Channel name template.
The iterator over detection elements.
Int_t ManuId2PCBIndex(Int_t detElemId, Int_t manuId) const
Returns the index of PCB (within a St345 slat) for a given manu number.
void AliasesAsLdif(const char *ldiffile) const
static AliMpSegmentation * Instance(Bool_t warn=true)
TString DCSMCHLVAliasName(Int_t detElemId, Int_t voltageType, AliMp::PlaneType planeType=AliMp::kBendingPlane) const
const AliMpSlat * GetSlatByElectronics(Int_t detElemId, Int_t elCardID, Bool_t warn=true) const
static const char * fgkDCSChamberPattern[]
DCS Tracker chamber name template.
Int_t ManuId2Sector(Int_t detElemId, Int_t manuId) const
Return the HV-sector number (within a St12 quadrant) for a given manu number.
static const char * fgkDCSQuadrantPattern[]
DCS Tracker quadrant name template.
const AliMpSlat * GetSlat(const AliMpVSegmentation *kSegmentation, Bool_t warn=true) const
Double_t GetDimensionX() const
Return x dimension.
Collection of methods usefull to DCS handling for MUON TRK and TRG.
Int_t NumberOfPCBs(Int_t detElemId) const
Int_t FindPCBIndexByMotifPositionID(Int_t manuId) const
Find the index of the PCB containing a given manu.
Int_t CurrentDEId() const
static const char * fgkDCSMCHLVGroupPattern[]
DCS Tracker chamber LV group name template.
A slat (building block of stations 3, 4 and 5)
static const char * fgkDCSSideTrackerName[]
DCS Tracker Name of the side written in DCS.
Int_t DetElemId2DCS(Int_t detElemId, Int_t &side, Int_t &chId) const
static const char * fgkDCSChannelSt345Pattern[]
DCS Tracker Channel name template.
#define AliWarning(message)
Bool_t GetElementsFromDCSMCHLVAlias(TString alias, Int_t &chamberNumber, Int_t &groupNumber, TString &voltageType) const
TString DCSNameFromAlias(const char *dcsAlias) const
static Int_t GetChamberId(Int_t detElemId, Bool_t warn=true)
static const char * fgkDCSChannelTriggerPattern[]
DCS Trigger Channel name template for output.
Bool_t DecodeDCSMCHLVAlias(const char *dcsAlias, Int_t *&detElemId, Int_t &numberOfDetectionElements, AliMp::PlaneType &planeType) const
Bool_t CheckConsistency(Int_t detElemId) const
Int_t ManuId2Index(Int_t detElemId, Int_t manuId) const
static Int_t GetNofDEInChamber(Int_t chamberId, Bool_t warn=true)
TString DCSAliasFromName(const char *dcsName) const
const AliMpSector * GetSectorByElectronics(Int_t detElemId, Int_t elCardID, Bool_t warn=true) const
#define AliCodeTimerAuto(message, counter)
static AliMp::StationType GetStationType(Int_t detElemId)
Int_t DCSIndexFromDCSAlias(const char *dcsAlias) const
A sector (quadrant) of the MUON chamber of stations 1 and 2.
static const char * fgkDCSChannelTriggerPatternRead[]
DCS Trigger Channel name template for input.
#define AliFatal(message)
AliMpMotifMap * GetMotifMap() const
Return the motif map.
#define AliDebug(logLevel, message)
Bool_t SetDetector(const char *detName)
Int_t DCSvariableFromDCSAlias(const char *dcsAlias) const
Int_t DCS2DE(Int_t chamberId, Int_t side, Int_t dcsNumber) const
Number of measured quantities.
AliMpMotifPosition * FindMotifPosition(Int_t motifPositionID) const
static const char * fgkDCSSwitchSt345Pattern
DCS Tracker Switch name template.
TObjArray * GenerateAliases(const char *pattern="") const
TObjArray * CompactAliases() const
TString DCSSwitchAliasName(Int_t detElemId, Int_t pcbNumber) const
Double_t GetPositionX() const
Return x position.
static const char * fgkDCSSideTriggerName[]
DCS Trigger Name of the side written in DCS.
#define AliError(message)
static const char * fgkDetectorName[]
Name of detector (Tracker or Trigger)
static const char * fgkDCSMeasureName[]
DCS Trigger Name of the measure (HV or current) written in DCS.
Int_t DetElemIdFromDCSAlias(const char *dcsAlias) const
TString DCSAliasName(Int_t detElemId, Int_t sector=0, Int_t dcsMeasure=0) const
static Bool_t IsValidDetElemId(Int_t detElemId, Bool_t warn=false)
Int_t GetSize() const
Returns the number of PCBs of this slat.
Int_t fDetector
Detector type (either tracker or trigger)