X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONPadStatusMaker.cxx;h=f7ff3c77db8ed7ee1ba2cea552e88583f6d16920;hb=d544b5a69a9ef45f673bad83143205fe225eb5ac;hp=6b8c3abaa75418db5d0e385a490cfcab2f359532;hpb=ca91304529ab670ee6772a1406af5f0d8ce0545a;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONPadStatusMaker.cxx b/MUON/AliMUONPadStatusMaker.cxx index 6b8c3abaa75..f7ff3c77db8 100644 --- a/MUON/AliMUONPadStatusMaker.cxx +++ b/MUON/AliMUONPadStatusMaker.cxx @@ -73,15 +73,13 @@ AliMUONPadStatusMaker::AliMUONPadStatusMaker(const AliMUONCalibrationData& calib fGainA1Limits(0,1E30), fGainA2Limits(-1E-30,1E30), fGainThresLimits(0,4095), -fHVSt12Limits(0,5000), -fHVSt345Limits(0,5000), fPedMeanLimits(0,4095), fPedSigmaLimits(0,4095), fManuOccupancyLimits(0,1.0), fBuspatchOccupancyLimits(0,1.0), fDEOccupancyLimits(0,1.0), fStatus(new AliMUON2DMap(true)), -fHV(new TExMap), +fHV(0x0), fPedestals(calibData.Pedestals()), fGains(calibData.Gains()), fTrackerData(0x0) @@ -92,7 +90,13 @@ fTrackerData(0x0) /// create a tracker data from the occupancy map fTrackerData = new AliMUONTrackerData("OCC","OCC",*(calibData.OccupancyMap())); } + if ( calibData.HV() ) + { + /// Only create the fHV internal store if there are some HV values available + fHV = new TExMap; + } + SetHVLimit(-1,0.0); } //_____________________________________________________________________________ @@ -111,6 +115,11 @@ AliMUONPadStatusMaker::AsString(Int_t status) { /// return a human readable version of the integer status + if ( status == 0 ) + { + return "Brave New World"; + } + Int_t pedStatus; Int_t gainStatus; Int_t hvStatus; @@ -212,11 +221,15 @@ AliMUONPadStatusMaker::HVSt12Status(Int_t detElemId, Int_t sector, AliCodeTimerAuto("",0) + if (!fHV) return kFALSE; + Bool_t error = kFALSE; hvChannelTooLow = kFALSE; hvChannelTooHigh = kFALSE; hvChannelON = kTRUE; + Int_t chamberId = AliMpDEManager::GetChamberId(detElemId); + AliMpDCSNamer hvNamer("TRACKER"); TString hvChannel(hvNamer.DCSChannelName(detElemId,sector)); @@ -239,9 +252,8 @@ AliMUONPadStatusMaker::HVSt12Status(Int_t detElemId, Int_t sector, } else { - // find out min and max value, and makes a cut + // find out min value, and makes a cut Float_t hvMin(1E9); - Float_t hvMax(0); TIter next(values); AliDCSValue* val; @@ -249,15 +261,12 @@ AliMUONPadStatusMaker::HVSt12Status(Int_t detElemId, Int_t sector, { Float_t hv = val->GetFloat(); hvMin = TMath::Min(hv,hvMin); - hvMax = TMath::Max(hv,hvMax); } - float lowThreshold = fHVSt12Limits.X(); - float highThreshold = fHVSt12Limits.Y(); + float lowThreshold = HVLimit(chamberId); if ( hvMin < lowThreshold ) hvChannelTooLow = kTRUE; - if ( hvMax > highThreshold ) hvChannelTooHigh = kTRUE; - if ( hvMin < 1 ) hvChannelON = kFALSE; + if ( hvMin < hvNamer.TrackerHVOFF() ) hvChannelON = kFALSE; } } @@ -322,6 +331,8 @@ AliMUONPadStatusMaker::HVSt345Status(Int_t detElemId, Int_t pcbIndex, AliCodeTimerAuto("",0) + if (!fHV) return kFALSE; + Bool_t error = kFALSE; hvChannelTooLow = kFALSE; hvChannelTooHigh = kFALSE; @@ -330,6 +341,8 @@ AliMUONPadStatusMaker::HVSt345Status(Int_t detElemId, Int_t pcbIndex, AliMpDCSNamer hvNamer("TRACKER"); + Int_t chamberId = AliMpDEManager::GetChamberId(detElemId); + TString hvChannel(hvNamer.DCSChannelName(detElemId)); TMap* hvMap = fkCalibrationData.HV(); @@ -351,9 +364,8 @@ AliMUONPadStatusMaker::HVSt345Status(Int_t detElemId, Int_t pcbIndex, } else { - // find out min and max value, and makes a cut + // find out min value, and makes a cut Float_t hvMin(1E9); - Float_t hvMax(0); TIter next(values); AliDCSValue* val; @@ -361,15 +373,12 @@ AliMUONPadStatusMaker::HVSt345Status(Int_t detElemId, Int_t pcbIndex, { Float_t hv = val->GetFloat(); hvMin = TMath::Min(hv,hvMin); - hvMax = TMath::Max(hv,hvMax); } - float lowThreshold = fHVSt345Limits.X(); - float highThreshold = fHVSt345Limits.Y(); + float lowThreshold = HVLimit(chamberId); if ( hvMin < lowThreshold ) hvChannelTooLow = kTRUE; - else if ( hvMax > highThreshold ) hvChannelTooHigh = kTRUE; - if ( hvMin < 1 ) hvChannelON = kFALSE; + if ( hvMin < hvNamer.TrackerHVOFF() ) hvChannelON = kFALSE; } } @@ -406,7 +415,7 @@ AliMUONPadStatusMaker::HVStatus(Int_t detElemId, Int_t manuId) const AliCodeTimerAuto("",0) - if ( !fkCalibrationData.HV() ) return kMissing; + if ( !fHV ) return kMissing; Long_t lint = fHV->GetValue(AliMpManuUID::BuildUniqueID(detElemId,manuId)); @@ -649,14 +658,51 @@ AliMUONPadStatusMaker::SetHVStatus(Int_t detElemId, Int_t index, Int_t status) c } } +//_____________________________________________________________________________ +Double_t +AliMUONPadStatusMaker::HVLimit(Int_t chamberId) const +{ + /// Get HV limit for a given chamber + if ( chamberId >=0 && chamberId < 10 ) + { + return fHVLimit[chamberId]; + } + return 0.0; +} + +//_____________________________________________________________________________ +void +AliMUONPadStatusMaker::SetHVLimit(Int_t chamberId, Double_t hv) +{ + /// Set hv limit for a given chamber (or all if chamberId==-1) + + if ( chamberId == -1 ) + { + for ( Int_t i = 0; i < 10; ++i ) + { + fHVLimit[i] = hv; + } + } + else if ( chamberId >= 0 && chamberId < 10 ) + { + fHVLimit[chamberId]=hv; + } + else + { + AliError(Form("chamberId=%d is invalid",chamberId)); + } +} + //_____________________________________________________________________________ void AliMUONPadStatusMaker::SetLimits(const AliMUONRecoParam& recoParams) { /// Set the limits from the recoparam - SetHVSt12Limits(recoParams.HVSt12LowLimit(),recoParams.HVSt12HighLimit()); - SetHVSt345Limits(recoParams.HVSt345LowLimit(),recoParams.HVSt345HighLimit()); + for ( int i = 0; i < 10; ++i ) + { + SetHVLimit(i,recoParams.HVLimit(i)); + } SetPedMeanLimits(recoParams.PedMeanLowLimit(),recoParams.PedMeanHighLimit()); SetPedSigmaLimits(recoParams.PedSigmaLowLimit(),recoParams.PedSigmaHighLimit()); @@ -701,7 +747,7 @@ AliMUONPadStatusMaker::Report(UInt_t mask) Int_t status = PadStatus(detElemId,manuId,i); - if ( ( status & mask) || (!mask && status) ) + if ( mask && ( status & mask) ) // note that if mask == 0, all pads are good... { ++nBadPads; log.Log(AsString(status)); @@ -710,11 +756,17 @@ AliMUONPadStatusMaker::Report(UInt_t mask) } } + if (!nPads) + { + AliError("Got no pad from the iterator ?! That's not normal. Please check !"); + return; + } + TString msg; Int_t ntimes; cout << Form("According to mask %x (human readable form below) %6d pads are bad (over a total of %6d, i.e. %7.2f %%)", - mask,nBadPads,nPads,nPads ? nBadPads*100.0/nPads : 0.0) << endl; + mask,nBadPads,nPads,nBadPads*100.0/nPads) << endl; cout << AliMUONPadStatusMaker::AsCondition(mask) << endl; cout << "--------" << endl;