71 Int_t cathode, Int_t chamber,
72 TString displayHistoTitle)
78 TH2F* displayHisto =
new TH2F();
81 cathode, chamber, displayHistoName, displayHistoTitle);
90 TString displayHistoTitle)
98 TH1F* inputHisto =
new TH1F(
"boardNumbers",
"Board Numbers",kNboards,0.5,(Float_t)kNboards + 0.5);
99 for(Int_t ibin=1; ibin<=kNboards; ibin++){
100 inputHisto->Fill(ibin,ibin);
108 displayHisto->SetStats(kFALSE);
116 Int_t chamber, TString displayHistoTitle,
123 cathode, chamber, displayHistoTitle);
133 Int_t chamber, TString displayHistoTitle,
140 cathode, chamber, displayHistoTitle);
158 cathode, chamber,
"",
"",displayOpt);
172 cathode, chamber,
"",
"",displayOpt);
178 Int_t cathode, Int_t chamber,
179 TString displayHistoName, TString displayHistoTitle,
192 AliError(
"Could not access mapping from OCDB !");
193 AliError(
"Histograms are not initialized !");
199 Int_t iCath = cathode;
206 Float_t yOffsetLine, xOffsetLine = 0.;
208 const Float_t kResetValue=1234567.;
212 xAxisBoard.Reset(kResetValue);
214 yAxisBoard.Reset(kResetValue);
217 xAxisStrip.Reset(kResetValue);
219 yAxisStrip.Reset(kResetValue);
221 else if(!displayHisto){
222 AliWarning(
"Display histogram not initialized. Please initialize it first!");
226 TH1* inputHisto =
dynamic_cast<TH1*
>(inputObject);
228 if ( inputHisto->GetEntries() == 0 ) {
233 TGraph* inputGraph =
dynamic_cast<TGraph*
>(inputObject);
235 if ( inputGraph->GetN() == 0 ){
240 AliWarning(
"The object should inherit from TH1 or TGraph!");
246 Float_t xWidth, yWidth, yWidthSlat=0., xWidthCol=0.;
248 Float_t x1b=0., x2b=0., y1b=0., y2b=0.;
249 Float_t xcPad, ycPad;
253 const Float_t kShiftB = 0.5;
254 const Float_t kShiftS = 0.1;
256 const Float_t kShiftX = (iCath==0) ? kShiftB : kShiftS;
257 const Float_t kShiftY = (iCath==0) ? kShiftS : kShiftB;
258 const Float_t kShiftEl = (displayType==
kDisplaySlats) ? 0.01 : kShiftB;
262 Int_t iBoard = iLoc+1;
265 if (!detElemId)
continue;
287 slat = detElemId%100;
288 line = (4 + slat)%18;
294 yOffsetLine = (Float_t)(line - 4) * 2. * yWidthSlat;
296 Int_t nLocations = 1;
304 for (Int_t ibitxy = 0; ibitxy < 16; ++ibitxy) {
317 if(line==4) xcPad += 0.75 * sign * xWidthCol;
324 x1b = xcPad - xWidth + kShiftEl;
325 y1b = ycPad - yWidth + kShiftEl;
327 x2b = xcPad + xWidth - kShiftEl;
328 y2b = ycPad + yWidth - kShiftEl;
337 x1 = xcPad - xWidth + kShiftX;
338 y1 = ycPad - yWidth + kShiftY;
339 x2 = xcPad + xWidth - kShiftX;
340 y2 = ycPad + yWidth - kShiftY;
350 FillBins(inputObject, displayHisto, iBoard, iStrip, x1, x2, y1, y2, kShiftX, kShiftY, displayOpt);
369 FillBins(inputObject, displayHisto, iBoard, -nLocations, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
371 FillBins(inputObject, displayHisto, slat, -1, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
374 if ( inputObject )
return kTRUE;
376 displayHisto->Reset();
379 const Float_t kMinDiff = 0.1;
381 TArrayD* currArray[4] = {&xAxisStrip, &yAxisStrip,
382 &xAxisBoard, &yAxisBoard};
383 for(Int_t iaxis=0; iaxis<4; iaxis++){
385 while(TMath::Abs((*currArray[iaxis])[ipoint]-kResetValue)>kMinDiff) {
388 if(ipoint>currArray[iaxis]->GetSize()-2)
389 AliWarning(Form(
"Array size (%i) lower than the number of points!", currArray[iaxis]->GetSize()));
390 currArray[iaxis]->Set(ipoint);
395 displayHisto->SetBins(xAxisStrip.GetSize()-1, xAxisStrip.GetArray(),
396 yAxisStrip.GetSize()-1, yAxisStrip.GetArray());
400 displayHisto->SetBins(xAxisBoard.GetSize()-1, xAxisBoard.GetArray(),
401 yAxisBoard.GetSize()-1, yAxisBoard.GetArray());
405 displayHisto->SetName(displayHistoName.Data());
406 displayHisto->SetTitle(displayHistoTitle.Data());
407 displayHisto->SetXTitle(
"X (cm)");
408 displayHisto->SetYTitle(
"Y (cm)");
422 Int_t nEntries = position.GetSize()-1;
424 const Float_t kMinDiff = 0.1;
425 for(Int_t i=0; i<nEntries; i++){
426 if(TMath::Abs(position[i]-currVal)<kMinDiff)
return kFALSE;
427 if(TMath::Abs(position[i]-kResetValue)<kMinDiff) {
428 position[i] = currVal;
431 if(currVal>position[i])
continue;
433 position[i] = currVal;
434 for(Int_t j=i+1; j<nEntries; j++){
438 if(tmp1==kResetValue)
break;
448 Int_t iElement1, Int_t iElement2,
449 Float_t x1, Float_t x2, Float_t y1, Float_t y2,
450 const Float_t kShiftX,
const Float_t kShiftY,
458 Float_t binContent=0;
459 TH1* inputHisto =
dynamic_cast<TH1*
>(inputObject);
461 Int_t binX = inputHisto->GetXaxis()->FindBin(iElement1);
462 if ( inputObject->IsA()->InheritsFrom(
"TH2") ) {
463 binY = inputHisto->GetYaxis()->FindBin(iElement2);
464 binContent = inputHisto->GetBinContent(binX, binY);
466 else binContent = inputHisto->GetBinContent(binX);
469 TGraph* inputGraph =
dynamic_cast<TGraph*
>(inputObject);
472 for ( Int_t ipt=0; ipt<inputGraph->GetN(); ipt++){
473 inputGraph->GetPoint(ipt, xpt, ypt);
474 if ( TMath::Abs(xpt - iElement1) < 0.1 ) {
488 Int_t binX1 = displayHisto->GetXaxis()->FindBin(x1 + 0.01*kShiftX);
489 Int_t binX2 = displayHisto->GetXaxis()->FindBin(x2 - 0.01*kShiftX);
490 Int_t binY1 = displayHisto->GetYaxis()->FindBin(y1 + 0.01*kShiftY);
491 Int_t binY2 = displayHisto->GetYaxis()->FindBin(y2 - 0.01*kShiftY);
494 Int_t meanBin = (binX1+binX2)/2;
498 meanBin = (binY1+binY2)/2;
503 Float_t elementArea = 1.;
505 elementArea = (x2 - x1 + 2*kShiftX) *
506 (y2 - y1 + 2*kShiftY);
516 if ( iElement2 < 0 ) elementArea *= -(Double_t)iElement2;
520 for(Int_t ibinx=binX1; ibinx<=binX2; ibinx++){
521 for(Int_t ibiny=binY1; ibiny<=binY2; ibiny++){
522 displayHisto->SetBinContent(ibinx,ibiny,binContent/elementArea);
Int_t GetNofLocations() const
const AliMpVSegmentation * GetMpSegmentation(Int_t detElemId, AliMp::CathodType cath, Bool_t warn=true) const
TH2 * GetBoardNumberHisto(TString displayHistoName, Int_t chamber=11, TString displayHistoTitle="")
Bool_t IsNotified() const
Return notified flag (not copy card)
EDisplayType
Display element inidices (strip,board,slat)
void FillBins(TObject *inputHisto, TH2 *displayHisto, Int_t iElement1, Int_t iElement2, Float_t x1, Float_t x2, Float_t y1, Float_t y2, const Float_t kShiftX, const Float_t kShiftY, EDisplayOption displayOpt)
AliMpLocalBoard * GetLocalBoard(Int_t localBoardId, Bool_t warn=true) const
Bool_t InitOrDisplayTriggerInfo(TObject *inputHisto, TH2 *displayHisto, EDisplayType displayType, Int_t cathode, Int_t chamber, TString displayHistoName, TString displayHistoTitle, EDisplayOption displayOpt=kDefaultDisplay)
Bool_t AddSortedPoint(Float_t currVal, TArrayD &position, const Float_t kResetValue)
Bool_t FillDisplayHistogram(TH1 *inputHisto, TH2 *displayHisto, EDisplayType displayType, Int_t cathode, Int_t chamber=11, EDisplayOption displayOpt=kDefaultDisplay)
Int_t GetDEfromLocalBoard(Int_t localBoardId, Int_t chamberId) const
static AliMpSegmentation * Instance(Bool_t warn=true)
Displays strip/board/slat content even if it is 0.
static Bool_t LoadDDLStore(Bool_t warn=false)
Int_t GetSwitch(Int_t index) const
Get switch bit wise (return a inteter for backware compatibility)
(1) reset the LSB for special configuration of board RC2L5B4 & RC2L6B1
virtual ~AliMUONTriggerDisplay()
Class that manages the properties of the local board.
static Int_t NofLocalBoards()
Return number of trigger local boards.
Histogram filled with board numbers.
static AliMpDDLStore * Instance(Bool_t warn=true)
Converts histograms as a function of strip/board/slat number in human readable histograms.
static Int_t NofCathodes()
Return number of cathodes.
TH2 * GetEmptyDisplayHisto(TString displayHistoName, EDisplayType displayType, Int_t cathode, Int_t chamber=11, TString displayHistoTitle="")
Double_t GetPositionY() const
Return the pad x position (in cm)
AliMp::CathodType GetCathodType(Int_t cathodNumber)
Convert integer number in enum;.
Int_t GetLocalBoardId(Int_t i) const
TH2 * GetDisplayHistogram(TH1 *inputHisto, TString displayHistoName, EDisplayType displayType, Int_t cathode, Int_t chamber=11, TString displayHistoTitle="", EDisplayOption displayOpt=kDefaultDisplay)
Bool_t IsValid() const
Return validity.
The abstract base class for the segmentation.
Double_t GetDimensionY() const
Return the y pad dimension - half length (in cm)
Draw input histo divided by element area.
Class which encapsuate all information about a pad.
Double_t GetPositionX() const
Return the pad x position (in cm)
virtual AliMpPad PadByLocation(Int_t manuId, Int_t manuChannel, Bool_t warning=true) const =0
Find pad by location.
Int_t GetLocalBoardChannel(Int_t i) const
Double_t GetDimensionX() const
Return the x pad dimension - half length (in cm)
static Int_t NofTrackingChambers()
Return number of tracking chambers.
EDisplayOption
Display options inidices.