20 #include "AliCodeTimer.h"
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"
126 TString sDetName(detName);
134 AliWarning(
"Detector name must be either tracker or trigger. Default tracker selected");
147 ofstream out(ldiffile);
157 out <<
"#" << detName.Data() <<
" config" << endl
158 <<
"dn: det=" << detName.Data() <<
",o=alice,dc=cern,dc=ch" << endl
159 <<
"objectClass: AliShuttleDetector" << endl
160 <<
"det: " << detName.Data() << endl
161 <<
"StrictRunOrder: 1" << endl
162 <<
"responsible: aphecetc@in2p3.fr" << endl
163 <<
"DCSHost: aldcs053.cern.ch" << endl
164 <<
"DCSPort: 4242" <<endl;
166 while ( ( s = (TObjString*)(next()) ) )
168 out <<
"DCSalias: " << s->String().Data() << endl;
190 a->Add(
new TObjString(
"MchHvLvRight/Chamber[00..03]Right/Quad0Sect[0..2].actual.vMon"));
191 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[00..03]Left/Quad1Sect[0..2].actual.vMon"));
192 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[00..03]Left/Quad2Sect[0..2].actual.vMon"));
193 a->Add(
new TObjString(
"MchHvLvRight/Chamber[00..03]Right/Quad3Sect[0..2].actual.vMon"));
197 a->Add(
new TObjString(
"MchHvLvRight/Chamber[04..09]Right/Slat[00..08].actual.vMon"));
198 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[04..09]Left/Slat[00..08].actual.vMon"));
200 a->Add(
new TObjString(
"MchHvLvRight/Chamber[06..09]Right/Slat[09..12].actual.vMon"));
201 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[06..09]Left/Slat[09..12].actual.vMon"));
207 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[01..10]Left/Group[1..4]dig.MeasurementSenseVoltage"));
208 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[01..10]Left/Group[1..4]ann.MeasurementSenseVoltage"));
209 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[01..10]Left/Group[1..4]anp.MeasurementSenseVoltage"));
210 a->Add(
new TObjString(
"MchHvLvRight/Chamber[01..10]Right/Group[1..4]dig.MeasurementSenseVoltage"));
211 a->Add(
new TObjString(
"MchHvLvRight/Chamber[01..10]Right/Group[1..4]ann.MeasurementSenseVoltage"));
212 a->Add(
new TObjString(
"MchHvLvRight/Chamber[01..10]Right/Group[1..4]anp.MeasurementSenseVoltage"));
216 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[05..06]Left/Group[5..5]dig.MeasurementSenseVoltage"));
217 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[05..06]Left/Group[5..5]ann.MeasurementSenseVoltage"));
218 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[05..06]Left/Group[5..5]anp.MeasurementSenseVoltage"));
219 a->Add(
new TObjString(
"MchHvLvRight/Chamber[05..06]Right/Group[5..5]dig.MeasurementSenseVoltage"));
220 a->Add(
new TObjString(
"MchHvLvRight/Chamber[05..06]Right/Group[5..5]ann.MeasurementSenseVoltage"));
221 a->Add(
new TObjString(
"MchHvLvRight/Chamber[05..06]Right/Group[5..5]anp.MeasurementSenseVoltage"));
224 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[07..10]Left/Group[5..7]dig.MeasurementSenseVoltage"));
225 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[07..10]Left/Group[5..7]ann.MeasurementSenseVoltage"));
226 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[07..10]Left/Group[5..7]anp.MeasurementSenseVoltage"));
227 a->Add(
new TObjString(
"MchHvLvRight/Chamber[07..10]Right/Group[5..7]dig.MeasurementSenseVoltage"));
228 a->Add(
new TObjString(
"MchHvLvRight/Chamber[07..10]Right/Group[5..7]ann.MeasurementSenseVoltage"));
229 a->Add(
new TObjString(
"MchHvLvRight/Chamber[07..10]Right/Group[5..7]anp.MeasurementSenseVoltage"));
234 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
235 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));
236 a->Add(
new TObjString(
"MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
237 a->Add(
new TObjString(
"MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));
239 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
240 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
241 a->Add(
new TObjString(
"MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
242 a->Add(
new TObjString(
"MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
257 a->Add(
new TObjString(Form(
"MchDE%04dsw[0..%d].inValue",detElemId,
NumberOfPCBs(detElemId)-1)));
279 Int_t chamberId = chId;
285 Int_t half = nofDE/2;
287 dcsNumber = half - dcsNumber;
289 Int_t quarter = nofDE/4;
290 Int_t threeQuarter = half + quarter;
294 de = threeQuarter + 1 - dcsNumber;
296 else if ( side == 1 )
298 if ( dcsNumber <= quarter )
300 de = dcsNumber + threeQuarter;
304 de = dcsNumber - quarter - 1;
310 if ( chId < 19 ) chamberId = chId - 1;
311 else chamberId = chId - 9;
319 else if ( side == 1 )
322 de = (13 + dcsNumber) % nofDE;
326 return (chamberId+1)*100 + de;
342 AliDebug(1,Form(
"DetElemId %d invalid",detElemId));
345 Int_t dcsNumber = (detElemId-(chamberId+1)*100);
373 Int_t quarter = nofDE/4;
375 Int_t half = nofDE/2;
377 Int_t threeQuarter = half + quarter;
381 if ( dcsNumber <= quarter )
383 dcsNumber += quarter + 1 ;
386 else if ( dcsNumber <= threeQuarter )
388 dcsNumber = ( threeQuarter - dcsNumber + 1 );
391 else if ( dcsNumber > threeQuarter )
393 dcsNumber = dcsNumber - threeQuarter;
401 dcsNumber = half-dcsNumber;
407 chId = chamberId + 1;
412 if ( dcsNumber >=5 && dcsNumber <= 13 ) {
414 dcsNumber = 14 - dcsNumber;
419 dcsNumber = (5 + dcsNumber) % nofDE;
421 AliDebug(10, Form(
"detElemId %i -> MT%i_side%i_L%i", detElemId, chId, side, dcsNumber));
437 TString salias(dcsAlias);
439 if ( !salias.Contains(
"MchHvLv") )
return dcsAlias;
440 if ( salias.Contains(
"Group"))
return dcsAlias;
442 Int_t quadrantNumber(-1);
443 Int_t chamberNumber(-1);
446 if ( salias.Contains(
"Left")) side = 0;
447 if ( salias.Contains(
"Right")) side = 1;
449 if ( side < 0 )
return "";
453 if ( salias.Contains(
"Slat") )
455 Int_t slatNumber(-1);
461 else if ( salias.Contains(
"Sect") )
463 Int_t sectorNumber(-1);
470 else if ( salias.Contains(
"Quad") )
477 else if ( salias.Contains(
"Chamber") )
484 if ( TString(dcsAlias).Contains(
"iMon") )
486 channelName.ReplaceAll(
"vMon",
"iMon");
498 TString sname(dcsName);
500 if ( !sname.Contains(
"MchHvLv") )
return dcsName;
501 if ( sname.Contains(
"Group"))
return dcsName;
503 Int_t quadrantNumber(-1);
504 Int_t chamberNumber(-1);
507 if ( sname.Contains(
"Left")) side = 0;
508 if ( sname.Contains(
"Right")) side = 1;
510 if ( side < 0 )
return "";
514 if ( sname.Contains(
"Slat") )
516 Int_t slatNumber(-1);
522 else if ( sname.Contains(
"Sect") )
524 Int_t sectorNumber(-1);
531 else if ( sname.Contains(
"Quad") )
538 else if ( sname.Contains(
"Chamber") )
545 if ( TString(dcsName).Contains(
"iMon") )
547 channelName.ReplaceAll(
"vMon",
"iMon");
560 TString salias(dcsAlias);
565 if (!salias.Contains(
"Group"))
573 if ( salias.Contains(
"Left"))
577 else if ( salias.Contains(
"Right"))
582 AliError(Form(
"unexpected alias=%s",salias.Data()));
586 Bool_t left = ( side == 0 );
588 Int_t chamberNumber, groupNumber;
593 if ( chamberNumber >= 1 && chamberNumber <= 4 )
596 if ( groupNumber == 1 )
609 else if ( groupNumber == 2 )
622 else if ( groupNumber == 3 )
635 else if ( groupNumber == 4 )
650 AliError(Form(
"Got incorrect group number=%d from alias=%s",groupNumber,salias.Data()));
654 numberOfDetectionElements=1;
655 detElemId =
new Int_t[numberOfDetectionElements];
656 detElemId[0] = chamberNumber*100 + deOffset;
658 else if ( chamberNumber >= 5 && chamberNumber <= 10 )
660 Int_t* dcsSlatNumber(0x0);
662 if ( chamberNumber >= 5 && chamberNumber <= 6 )
664 if ( groupNumber == 1 )
666 numberOfDetectionElements=3;
667 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
672 else if ( groupNumber == 5 )
674 numberOfDetectionElements=3;
675 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
680 else if ( groupNumber > 1 && groupNumber < 5 )
682 numberOfDetectionElements=1;
683 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
684 dcsSlatNumber[0]=groupNumber+2;
688 AliError(Form(
"Got incorrect group number=%d from alias=%s",groupNumber,salias.Data()));
692 else if ( chamberNumber >= 7 )
694 if ( groupNumber == 1 )
696 numberOfDetectionElements=4;
697 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
703 else if ( groupNumber == 7 )
705 numberOfDetectionElements=4;
706 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
712 else if ( groupNumber > 1 && groupNumber < 7 )
714 numberOfDetectionElements=1;
715 dcsSlatNumber=
new Int_t[numberOfDetectionElements];
716 dcsSlatNumber[0]=groupNumber+3;
720 AliError(Form(
"Got incorrect group number=%d from alias=%s",groupNumber,salias.Data()));
725 detElemId =
new Int_t[numberOfDetectionElements];
726 for (
int i = 0; i < numberOfDetectionElements; ++i )
728 detElemId[i] =
DCS2DE(chamberNumber-1,side,dcsSlatNumber[i]-1);
733 AliError(Form(
"Got an invalid chamberNumber=%d from alias=%s",chamberNumber,salias.Data()));
746 if ( voltageType == -1 ) {
748 }
else if ( voltageType == 0 ) {
750 }
else if ( voltageType == 1 ) {
754 if ( !voltage.Length() )
756 AliError(Form(
"Incorrect voltageType=%d. Expected -1,0 or 1.",voltageType));
763 AliError(Form(
"Got an incorrect chamberId=%d from detElemId=%d",chamberId,detElemId));
766 Int_t stationId = 1 + chamberId / 2;
793 Int_t remnant = detElemId % 100;
815 Int_t dcsSlatNumber = 1 + dcsNumber;
816 if ( stationId == 3 ) {
817 switch (dcsSlatNumber) {
826 group = dcsSlatNumber - 2;
839 switch (dcsSlatNumber) {
851 group = dcsSlatNumber - 3;
870 AliError(Form(
"Could not get LV group id for detection element %d",detElemId));
891 if ( chamberId < 0 )
return "";
893 Int_t side(-1), chId(-1);
916 aliasName.ReplaceAll(
"vMon",
"iMon");
951 TString sDcsAlias(dcsAlias);
957 if ( sDcsAlias.Contains(
"Left") )
961 else if ( sDcsAlias.Contains(
"Right") )
976 if ( sDcsAlias.Contains(
"Quad") )
999 AliDebug(1,Form(
"dcsAlias=%s",dcsAlias));
1001 TString sDcsAlias(dcsAlias);
1007 for(Int_t iside=0; iside<2; iside++){
1008 if ( sDcsAlias.Contains(sideName[iside]) ) {
1013 if(side<0)
return -2;
1022 if ( sDcsAlias.Contains(
"Slat") )
1025 detElemId =
DCS2DE(n1,side,n3);
1026 AliDebug(1,Form(
"Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
1028 else if ( sDcsAlias.Contains(
"Quad") )
1031 detElemId = 100*(n1+1) + n3;
1032 AliDebug(1,Form(
"Quad side=%d n1=%d n3=%d n4=%d de=%d",side,n1,n3,n4,detElemId));
1034 else if ( sDcsAlias.Contains(
"MT") )
1037 detElemId =
DCS2DE(n1,side,n3);
1038 AliDebug(1,Form(
"Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
1047 AliError(Form(
"Invalid aliasName %s",dcsAlias));
1059 TString sDcsAlias(dcsAlias);
1061 Int_t dcsMeasurement = -1;
1063 for(Int_t iMeas=0; iMeas<
kNDCSMeas; iMeas++){
1065 dcsMeasurement = iMeas;
1070 return dcsMeasurement;
1112 aliases->SetOwner(kTRUE);
1116 for(Int_t iMeas=0; iMeas<nMeasures; iMeas++){
1122 Int_t voltageType[] = { -1,0,1 };
1135 for (
int sector = 0; sector < 3; ++sector)
1138 aliases->Add(
new TObjString(
DCSAliasName(detElemId,sector)));
1147 for (
int pt = 0; pt < 2; ++pt )
1149 for (
int i = 0; i < 3; ++i )
1152 aliases->Add(
new TObjString(name));
1169 for (
int i = 0; i < 3; ++i )
1174 if (!aliases->FindObject(name))
1176 aliases->Add(
new TObjString(name));
1191 AliDebug(10,Form(
"Current DetElemId %i",detElemId));
1192 aliases->Add(
new TObjString(
DCSAliasName(detElemId,0,iMeas)));
1204 if (pattern && strlen(pattern)>0)
1208 tmp->SetOwner(kTRUE);
1209 for ( Int_t i = 0; i <= aliases->GetLast(); ++i )
1211 TString name =
static_cast<TObjString*
>(aliases->At(i))->String();
1212 if (name.Contains(pattern))
1214 tmp->Add(
new TObjString(name.Data()));
1248 AliCodeTimerAuto(
"",0)
1252 if ( ! slat )
return -1;
1263 AliCodeTimerAuto(
"",0)
1267 if ( ! sector )
return -1;
1275 Double_t x = lowerLeftX*10.0;
1282 if ( x < -10 ) AliFatal(
"");
1284 if ( x < 291.65 ) isector = 0;
1285 else if ( x < 585.65 ) isector = 1;
1286 else if ( x < 879.65 ) isector = 2;
1290 if ( x < -140 ) AliFatal(
"");
1292 if ( x < 283.75 ) isector = 0;
1293 else if ( x < 606.25 ) isector = 1;
1294 else if ( x < 1158.75 ) isector = 2;
1328 Bool_t isConsistent(kFALSE);
1329 TString requestInfo;
1335 requestInfo =
"TRACKER";
1339 requestInfo =
"TRIGGER";
1345 if(!isConsistent) AliWarning(Form(
"Requesting information for %s station but class initialized for %s",requestInfo.Data(),
fgkDetectorName[
fDetector]));
1347 return isConsistent;
1357 const char* voltageTypeName[] = {
"ann",
"dig",
"anp"};
1358 Int_t voltageType[] = { -1,0,1 };
1361 for ( Int_t iv = 0; iv < 3; ++iv )
1363 for ( Int_t i = 0; i < aliases->GetEntries(); ++i )
1365 TString dcsAlias =
static_cast<TObjString*
>(aliases->At(i))->String();
1366 if ( !dcsAlias.Contains(voltageTypeName[iv]))
continue;
1368 Int_t* detElemId(0x0);
1369 Int_t numberOfDetectionElements(0);
1372 Bool_t ok =
DecodeDCSMCHLVAlias(dcsAlias.Data(), detElemId, numberOfDetectionElements, planeType);
1376 AliError(Form(
"Could not decode alias=%s",dcsAlias.Data()));
1381 for ( Int_t
id = 0;
id < numberOfDetectionElements; ++id )
1386 if (check!=dcsAlias)
1388 AliError(Form(
"%s != %s",check.Data(),dcsAlias.Data()));
1403 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.
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
Number of measured quantities.
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.
AliMpMotifMap * GetMotifMap() const
Return the motif map.
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
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.
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)