20 #include "AliCodeTimer.h"
32 #include <Riostream.h>
34 #include <TObjArray.h>
35 #include <TObjString.h>
55 {
"MchHvLvLeft/Chamber%02dLeft/Slat%02d.actual.vMon",
56 "MchHvLvRight/Chamber%02dRight/Slat%02d.actual.vMon"
61 "MchHvLvLeft/Chamber%02dLeft/Quad%dSect%d.actual.vMon",
62 "MchHvLvRight/Chamber%02dRight/Quad%dSect%d.actual.vMon"
67 "MchHvLvLeft/Chamber%02dLeft/Quad%d",
68 "MchHvLvRight/Chamber%02dRight/Quad%d"
73 "MchHvLvLeft/Chamber%02dLeft",
74 "MchHvLvRight/Chamber%02dRight"
117 TString sDetName(detName);
125 AliWarning(
"Detector name must be either tracker or trigger. Default tracker selected");
138 ofstream out(ldiffile);
148 out <<
"#" << detName.Data() <<
" config" << endl
149 <<
"dn: det=" << detName.Data() <<
",o=alice,dc=cern,dc=ch" << endl
150 <<
"objectClass: AliShuttleDetector" << endl
151 <<
"det: " << detName.Data() << endl
152 <<
"StrictRunOrder: 1" << endl
153 <<
"responsible: aphecetc@in2p3.fr" << endl
154 <<
"DCSHost: aldcs053.cern.ch" << endl
155 <<
"DCSPort: 4242" <<endl;
157 while ( ( s = (TObjString*)(next()) ) )
159 out <<
"DCSalias: " << s->String().Data() << endl;
181 a->Add(
new TObjString(
"MchHvLvRight/Chamber[00..03]Right/Quad0Sect[0..2].actual.vMon"));
182 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[00..03]Left/Quad1Sect[0..2].actual.vMon"));
183 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[00..03]Left/Quad2Sect[0..2].actual.vMon"));
184 a->Add(
new TObjString(
"MchHvLvRight/Chamber[00..03]Right/Quad3Sect[0..2].actual.vMon"));
188 a->Add(
new TObjString(
"MchHvLvRight/Chamber[04..09]Right/Slat[00..08].actual.vMon"));
189 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[04..09]Left/Slat[00..08].actual.vMon"));
191 a->Add(
new TObjString(
"MchHvLvRight/Chamber[06..09]Right/Slat[09..12].actual.vMon"));
192 a->Add(
new TObjString(
"MchHvLvLeft/Chamber[06..09]Left/Slat[09..12].actual.vMon"));
196 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
197 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));
198 a->Add(
new TObjString(
"MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
199 a->Add(
new TObjString(
"MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));
201 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
202 a->Add(
new TObjString(
"MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
203 a->Add(
new TObjString(
"MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
204 a->Add(
new TObjString(
"MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
219 a->Add(
new TObjString(Form(
"MchDE%04dsw[0..%d].inValue",detElemId,
NumberOfPCBs(detElemId)-1)));
241 Int_t chamberId = chId;
247 Int_t half = nofDE/2;
249 dcsNumber = half - dcsNumber;
251 Int_t quarter = nofDE/4;
252 Int_t threeQuarter = half + quarter;
256 de = threeQuarter + 1 - dcsNumber;
258 else if ( side == 1 )
260 if ( dcsNumber <= quarter )
262 de = dcsNumber + threeQuarter;
266 de = dcsNumber - quarter - 1;
272 if ( chId < 19 ) chamberId = chId - 1;
273 else chamberId = chId - 9;
281 else if ( side == 1 )
284 de = (13 + dcsNumber) % nofDE;
288 return (chamberId+1)*100 + de;
304 AliDebug(1,Form(
"DetElemId %d invalid",detElemId));
307 Int_t dcsNumber = (detElemId-(chamberId+1)*100);
331 Int_t quarter = nofDE/4;
333 Int_t half = nofDE/2;
335 Int_t threeQuarter = half + quarter;
339 if ( dcsNumber <= quarter )
341 dcsNumber += quarter + 1 ;
344 else if ( dcsNumber <= threeQuarter )
346 dcsNumber = ( threeQuarter - dcsNumber + 1 );
349 else if ( dcsNumber > threeQuarter )
351 dcsNumber = dcsNumber - threeQuarter;
359 dcsNumber = half-dcsNumber;
365 chId = chamberId + 1;
370 if ( dcsNumber >=5 && dcsNumber <= 13 ) {
372 dcsNumber = 14 - dcsNumber;
377 dcsNumber = (5 + dcsNumber) % nofDE;
379 AliDebug(10, Form(
"detElemId %i -> MT%i_side%i_L%i", detElemId, chId, side, dcsNumber));
395 TString salias(dcsAlias);
397 if ( !salias.Contains(
"MchHvLv") )
return dcsAlias;
399 Int_t quadrantNumber(-1);
400 Int_t chamberNumber(-1);
403 if ( salias.Contains(
"Left")) side = 0;
404 if ( salias.Contains(
"Right")) side = 1;
406 if ( side < 0 )
return "";
410 if ( salias.Contains(
"Slat") )
412 Int_t slatNumber(-1);
418 else if ( salias.Contains(
"Sect") )
420 Int_t sectorNumber(-1);
427 else if ( salias.Contains(
"Quad") )
434 else if ( salias.Contains(
"Chamber") )
441 if ( TString(dcsAlias).Contains(
"iMon") )
443 channelName.ReplaceAll(
"vMon",
"iMon");
455 TString sname(dcsName);
457 if ( !sname.Contains(
"MchHvLv") )
return dcsName;
459 Int_t quadrantNumber(-1);
460 Int_t chamberNumber(-1);
463 if ( sname.Contains(
"Left")) side = 0;
464 if ( sname.Contains(
"Right")) side = 1;
466 if ( side < 0 )
return "";
470 if ( sname.Contains(
"Slat") )
472 Int_t slatNumber(-1);
478 else if ( sname.Contains(
"Sect") )
480 Int_t sectorNumber(-1);
487 else if ( sname.Contains(
"Quad") )
494 else if ( sname.Contains(
"Chamber") )
501 if ( TString(dcsName).Contains(
"iMon") )
503 channelName.ReplaceAll(
"vMon",
"iMon");
519 if ( chamberId < 0 )
return "";
521 Int_t side(-1), chId(-1);
544 aliasName.ReplaceAll(
"vMon",
"iMon");
579 TString sDcsAlias(dcsAlias);
585 if ( sDcsAlias.Contains(
"Left") )
589 else if ( sDcsAlias.Contains(
"Right") )
604 if ( sDcsAlias.Contains(
"Quad") )
627 AliDebug(1,Form(
"dcsAlias=%s",dcsAlias));
629 TString sDcsAlias(dcsAlias);
635 for(Int_t iside=0; iside<2; iside++){
636 if ( sDcsAlias.Contains(sideName[iside]) ) {
641 if(side<0)
return -2;
650 if ( sDcsAlias.Contains(
"Slat") )
653 detElemId =
DCS2DE(n1,side,n3);
654 AliDebug(1,Form(
"Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
656 else if ( sDcsAlias.Contains(
"Quad") )
659 detElemId = 100*(n1+1) + n3;
660 AliDebug(1,Form(
"Quad side=%d n1=%d n3=%d n4=%d de=%d",side,n1,n3,n4,detElemId));
662 else if ( sDcsAlias.Contains(
"MT") )
665 detElemId =
DCS2DE(n1,side,n3);
666 AliDebug(1,Form(
"Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
675 AliError(Form(
"Invalid aliasName %s",dcsAlias));
687 TString sDcsAlias(dcsAlias);
689 Int_t dcsMeasurement = -1;
691 for(Int_t iMeas=0; iMeas<
kNDCSMeas; iMeas++){
693 dcsMeasurement = iMeas;
698 return dcsMeasurement;
727 aliases->SetOwner(kTRUE);
731 for(Int_t iMeas=0; iMeas<nMeasures; iMeas++){
746 for (
int sector = 0; sector < 3; ++sector)
748 aliases->Add(
new TObjString(
DCSAliasName(detElemId,sector)));
770 AliDebug(10,Form(
"Current DetElemId %i",detElemId));
771 aliases->Add(
new TObjString(
DCSAliasName(detElemId,0,iMeas)));
811 AliCodeTimerAuto(
"",0)
815 if ( ! slat )
return -1;
826 AliCodeTimerAuto(
"",0)
830 if ( ! sector )
return -1;
838 Double_t x = lowerLeftX*10.0;
845 if ( x < -10 ) AliFatal(
"");
847 if ( x < 291.65 ) isector = 0;
848 else if ( x < 585.65 ) isector = 1;
849 else if ( x < 879.65 ) isector = 2;
853 if ( x < -140 ) AliFatal(
"");
855 if ( x < 283.75 ) isector = 0;
856 else if ( x < 606.25 ) isector = 1;
857 else if ( x < 1158.75 ) isector = 2;
891 Bool_t isConsistent(kFALSE);
898 requestInfo =
"TRACKER";
902 requestInfo =
"TRIGGER";
908 if(!isConsistent) AliWarning(Form(
"Requesting information for %s station but class initialized for %s",requestInfo.Data(),
fgkDetectorName[
fDetector]));
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)
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
A slat (building block of stations 3, 4 and 5)
TObjArray * GenerateAliases() const
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 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
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 * 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.
Number of measured quantities.
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)