#include "AliMUONManuPadPainter.h"
+#include "AliLog.h"
+#include "AliMUONPainterGroup.h"
#include "AliMUONPainterHelper.h"
-#include "AliMUONPainterPadStore.h"
+#include "AliMUONTrackerDataHistogrammer.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVDigit.h"
#include "AliMUONVTrackerData.h"
#include "AliMpConnection.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
-#include "AliMpDetElement.h"
#include "AliMpPad.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
-#include "AliLog.h"
-#include <float.h>
+#include <TCanvas.h>
+#include <TH1.h>
#include <TVirtualPad.h>
#include <TVirtualX.h>
+#include <float.h>
///\class AliMUONManuPadPainter
///
/// ctor
}
+//_____________________________________________________________________________
+AliMUONManuPadPainter::AliMUONManuPadPainter(TRootIOCtor* ioCtor)
+: AliMUONVPainter(ioCtor),
+fDetElemId(-1),
+fManuId(-1),
+fLineColorBck(-1),
+fLineWidthBck(-1),
+fFillColorBck(-1),
+fFillStyleBck(-1)
+{
+ /// ctor
+}
+
//_____________________________________________________________________________
AliMUONManuPadPainter::AliMUONManuPadPainter(const AliMUONVPainter& mother,
Int_t detElemId,
Double_t& dataMin, Double_t& dataMax) const
{
/// Compute data range spanned by this manu pads
- AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(fDetElemId);
+ const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fDetElemId,fManuId);
dataMin = FLT_MAX;
dataMax = -FLT_MAX;
for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels();
++manuChannel )
{
- if ( de->IsConnectedChannel(fManuId,manuChannel) )
+ if ( seg->HasPadByLocation(fManuId,manuChannel) )
{
Double_t value = data.Channel(fDetElemId, fManuId, manuChannel, dataIndex);
dataMin = TMath::Min(value,dataMin);
if ( pad.IsValid() )
{
- name = Form("%s%d",PathName().Data(),pad.GetLocation().GetSecond());
+ name = Form("%s%d",PathName().Data(),pad.GetManuChannel());
}
return name;
}
+//_____________________________________________________________________________
+Bool_t
+AliMUONManuPadPainter::IsIncluded() const
+{
+ /// whether this manu is included in the readout or not
+ return ( InteractiveReadOutConfig()->Manu(fDetElemId,fManuId) > 0 );
+}
+
//_____________________________________________________________________________
TString
AliMUONManuPadPainter::Describe(const AliMUONVTrackerData& data, Int_t dataIndex,
if ( pad.IsValid() )
{
- Double_t value = data.Channel(fDetElemId,fManuId,pad.GetLocation().GetSecond(),dataIndex);
+ Double_t value = data.Channel(fDetElemId,fManuId,pad.GetManuChannel(),dataIndex);
return AliMUONPainterHelper::Instance()->FormatValue(data.DimensionName(dataIndex).Data(),value);
}
}
}
+//_____________________________________________________________________________
+void
+AliMUONManuPadPainter::DrawHistogramClone(Double_t* values) const
+{
+ /// Draw histogram for pad at (values[0],values[1])
+
+ if ( !values ) return;
+
+ AliMUONPainterGroup* group = Master()->PlotterGroup();
+
+ if ( !group ) return; // no data to histogram in this painter
+
+ AliMpPad pad = PadByPosition(values[0],values[1]);
+
+ AliMUONVTrackerData* data = group->Data();
+
+ AliMUONTrackerDataHistogrammer tdh(*data,0,-1);
+
+ fHistogram = tdh.CreateChannelHisto(fDetElemId, fManuId,pad.GetManuChannel());
+
+ if (fHistogram)
+ {
+ new TCanvas();
+ fHistogram->Draw();
+ }
+}
+
//_____________________________________________________________________________
void
AliMUONManuPadPainter::PaintArea(const AliMUONVTrackerData& data,
AliMUONPainterHelper* h = AliMUONPainterHelper::Instance();
BackupStyle();
-
- Int_t cathode = h->GetCathodeType(fDetElemId,fManuId);
-
+
gVirtualX->SetLineColor(-1);
gVirtualX->SetFillStyle(1);
+ const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fDetElemId,fManuId);
+
for ( Int_t i = 0; i < AliMpConstants::ManuNofChannels(); ++i )
{
- Int_t id = AliMUONVDigit::BuildUniqueID(fDetElemId,fManuId,i,cathode);
-
- TVector2 position;
- TVector2 dimensions;
+ AliMpPad pad = seg->PadByLocation(fManuId,i,kFALSE);
- h->PadStore().GetPadGeometry(id,position,dimensions);
-
- if ( dimensions.X() > 0 )
+ if ( pad.IsValid() )
{
Double_t value = data.Channel(fDetElemId,fManuId,i,dataIndex);
fDetElemId,fManuId,i,value,min,max,
color));
}
-
+
gVirtualX->SetFillColor(color);
- TVector2 bl(position-dimensions);
- TVector2 ur(position+dimensions);
+ PaintPad(pad);
- gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y());
}
}
//_____________________________________________________________________________
void
-AliMUONManuPadPainter::PaintPad(Int_t padId) const
+AliMUONManuPadPainter::PaintPad(const AliMpPad& pad) const
{
- /// Paint a single pad
+ Double_t blx = pad.GetPositionX()-pad.GetDimensionX();
+ Double_t bly = pad.GetPositionY()-pad.GetDimensionY();
- TVector2 position;
- TVector2 dimensions;
-
- AliMUONPainterHelper::Instance()->PadStore().GetPadGeometry(padId,position,dimensions);
+ Double_t urx = pad.GetPositionX()+pad.GetDimensionX();
+ Double_t ury = pad.GetPositionY()+pad.GetDimensionY();
+
+ Double_t xe1,ye1,xe2,ye2,z;
- if ( dimensions.X() > 0 )
- {
- TVector2 bl(position-dimensions);
- TVector2 ur(position+dimensions);
+ AliMUONPainterHelper::Instance()->Local2Global(fDetElemId,blx,bly,0,xe1,ye1,z);
+ AliMUONPainterHelper::Instance()->Local2Global(fDetElemId,urx,ury,0,xe2,ye2,z);
- gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y());
- }
+ gPad->PaintBox(xe1,ye1,xe2,ye2);
}
//_____________________________________________________________________________
Int_t lineColor = color >= 0 ? color : GetLineColor();
- AliMUONPainterHelper* h = AliMUONPainterHelper::Instance();
-
- AliDebug(1,Form("color=%d lineColor=%d x=%7.3f y=%7.3f",color,lineColor,x,y));
-
if ( lineColor > 0 )
{
BackupStyle();
- Int_t cathode = h->GetCathodeType(fDetElemId,fManuId);
-
gVirtualX->SetLineColor(lineColor);
gVirtualX->SetFillStyle(0);
// find pad to be drawn
AliMpPad pad = PadByPosition(x,y);
- Int_t id = AliMUONVDigit::BuildUniqueID(fDetElemId,fManuId,pad.GetLocation().GetSecond(),cathode);
-
- PaintPad(id);
+ PaintPad(pad);
}
else
{
+ const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fDetElemId,fManuId);
+
for ( Int_t i = 0; i < AliMpConstants::ManuNofChannels(); ++i )
{
- Int_t id = AliMUONVDigit::BuildUniqueID(fDetElemId,fManuId,i,cathode);
+ AliMpPad pad = seg->PadByLocation(fManuId,i,kFALSE);
+
+ if (pad.IsValid()) PaintPad(pad);
- PaintPad(id);
+ PaintPad(pad);
}
}
RestoreStyle();
AliMUONPainterHelper::Instance()->Global2Local(fDetElemId,x,y,zg,xl,yl,zl);
- return seg->PadByPosition(TVector2(xl,yl));
+ return seg->PadByPosition(xl,yl);
}
//_____________________________________________________________________________