From bde6e10f09d63e0e56c46f034c82a4ab7827995a Mon Sep 17 00:00:00 2001 From: ivana Date: Fri, 20 Oct 2006 16:10:30 +0000 Subject: [PATCH] Allow to draw a motifType (Laurent) --- MUON/mapping/AliMpMotifPainter.cxx | 92 ++++++++++++++++---------- MUON/mapping/AliMpMotifPainter.h | 4 +- MUON/mapping/AliMpVPainter.cxx | 3 + MUON/mapping/macros/testGraphicsSlat.C | 30 ++++++++- 4 files changed, 93 insertions(+), 36 deletions(-) diff --git a/MUON/mapping/AliMpMotifPainter.cxx b/MUON/mapping/AliMpMotifPainter.cxx index 9624052fde9..c582744c4f7 100755 --- a/MUON/mapping/AliMpMotifPainter.cxx +++ b/MUON/mapping/AliMpMotifPainter.cxx @@ -27,8 +27,10 @@ #include "AliMpGraphContext.h" #include "AliMpMotifPosition.h" #include "AliMpMotifType.h" +#include "AliMpMotif.h" #include "AliMpConnection.h" #include "AliMpIntPair.h" +#include "AliLog.h" #include #include @@ -51,7 +53,28 @@ AliMpMotifPainter::AliMpMotifPainter(AliMpMotifPosition *motifPos) fMotifPos(motifPos) { /// Standard constructor + AliDebug(1,"Default ctor"); +} +//_______________________________________________________________________ +AliMpMotifPainter::AliMpMotifPainter(AliMpMotifType* motifType) +: AliMpVPainter(), +fMotifPos(0x0) +{ + /// Constructor from a motif Type. We hereby create a MotifPosition + /// object from it, using arbitrary pad sizes, as this is just a way + /// to visualize the *shape* of the motif. + + AliDebug(1,"Ctor from motifType"); + + const Double_t dx = 5; + const Double_t dy = 5; // cm but arbitrary anyway + + AliMpVMotif* motif = new AliMpMotif(motifType->GetID(), + motifType, + TVector2(dx,dy)); + + fMotifPos = new AliMpMotifPosition(-1,motif,motif->Dimensions()); } //_______________________________________________________________________ @@ -132,45 +155,46 @@ void AliMpMotifPainter::Paint(Option_t *option) } break; case 'P': - { - //PaintWholeBox(kFALSE); - AliMpMotifType *motifType = fMotifPos->GetMotif()->GetMotifType(); - for (Int_t j=motifType->GetNofPadsY()-1;j>=0;j--){ - for (Int_t i=0;iGetNofPadsX();i++){ - AliMpIntPair indices = AliMpIntPair(i,j); - AliMpConnection* connect = - motifType->FindConnectionByLocalIndices(indices); - if (connect){ - TVector2 realPadPos = + { + //PaintWholeBox(kFALSE); + AliMpMotifType *motifType = fMotifPos->GetMotif()->GetMotifType(); + StdoutToAliDebug(1,motifType->Print("G");); + for (Int_t j=motifType->GetNofPadsY()-1;j>=0;j--){ + for (Int_t i=0;iGetNofPadsX();i++){ + AliMpIntPair indices(i,j); + AliMpConnection* connect = + motifType->FindConnectionByLocalIndices(indices); + if (connect){ + TVector2 realPadPos = GetPosition()+fMotifPos->GetMotif()->PadPositionLocal(indices); - TVector2 padPadPos,padPadDim; - gr->RealToPad(realPadPos, - fMotifPos->GetMotif()->GetPadDimensions(indices), - padPadPos,padPadDim); - TVector2 bl = padPadPos - padPadDim; - TVector2 ur = padPadPos + padPadDim; - - - Style_t sty = gVirtualX->GetFillStyle(); - gVirtualX->SetFillStyle(1); - gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y()); - gVirtualX->SetFillStyle(0); - gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y()); - gVirtualX->SetFillStyle(sty); - if (option[1]=='T'){ - Float_t textSize = gVirtualX->GetTextSize(); - gVirtualX->SetTextSize(10); - gVirtualX->SetTextAlign(22); - // gPad->PaintText(padPadPos.X()-0.01,padPadPos.Y()-0.01, - gPad->PaintText((bl.X()+ur.X())/2.0,(bl.Y()+ur.Y())/2.0, - Form("%d",connect->GetGassiNum())); - - gVirtualX->SetTextSize(textSize); + TVector2 padPadPos,padPadDim; + gr->RealToPad(realPadPos, + fMotifPos->GetMotif()->GetPadDimensions(indices), + padPadPos,padPadDim); + TVector2 bl = padPadPos - padPadDim; + TVector2 ur = padPadPos + padPadDim; + + + Style_t sty = gVirtualX->GetFillStyle(); + gVirtualX->SetFillStyle(1); + gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y()); + gVirtualX->SetFillStyle(0); + gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y()); + gVirtualX->SetFillStyle(sty); + if (option[1]=='T'){ + Float_t textSize = gVirtualX->GetTextSize(); + gVirtualX->SetTextSize(10); + gVirtualX->SetTextAlign(22); + // gPad->PaintText(padPadPos.X()-0.01,padPadPos.Y()-0.01, + gPad->PaintText((bl.X()+ur.X())/2.0,(bl.Y()+ur.Y())/2.0, + Form("%d",connect->GetGassiNum())); + + gVirtualX->SetTextSize(textSize); } } } } - + } break; diff --git a/MUON/mapping/AliMpMotifPainter.h b/MUON/mapping/AliMpMotifPainter.h index 15b16d1a2ac..3a727a199c1 100755 --- a/MUON/mapping/AliMpMotifPainter.h +++ b/MUON/mapping/AliMpMotifPainter.h @@ -16,11 +16,13 @@ #include "AliMpVPainter.h" class AliMpMotifPosition; +class AliMpMotifType; class AliMpMotifPainter : public AliMpVPainter { public: AliMpMotifPainter(); + AliMpMotifPainter(AliMpMotifType* motifType); AliMpMotifPainter(AliMpMotifPosition *motifPos); virtual ~AliMpMotifPainter(); @@ -34,7 +36,7 @@ class AliMpMotifPainter : public AliMpVPainter AliMpMotifPainter& operator = (const AliMpMotifPainter& right); AliMpMotifPosition *fMotifPos; ///< the motif to draw - + ClassDef(AliMpMotifPainter,1) // Motif painter }; #endif //ALI_MP_MOTIF_PAINTER_H diff --git a/MUON/mapping/AliMpVPainter.cxx b/MUON/mapping/AliMpVPainter.cxx index 42a912336ab..ba099181a6b 100755 --- a/MUON/mapping/AliMpVPainter.cxx +++ b/MUON/mapping/AliMpVPainter.cxx @@ -37,6 +37,7 @@ #include "AliMpSubZonePainter.h" #include "AliMpRowSegmentPainter.h" #include "AliMpMotifPainter.h" +#include "AliMpMotifType.h" #include "AliMpPCB.h" #include "AliMpPCBPainter.h" #include "AliMpSlat.h" @@ -156,6 +157,8 @@ AliMpVPainter *AliMpVPainter::CreatePainter(TObject *object) painter = new AliMpRowSegmentPainter((AliMpVRowSegment *)object); else if (object->InheritsFrom(AliMpMotifPosition::Class())) painter = new AliMpMotifPainter((AliMpMotifPosition *)object); + else if (object->InheritsFrom(AliMpMotifType::Class())) + painter = new AliMpMotifPainter((AliMpMotifType *)object); else if (object->InheritsFrom(AliMpPCB::Class())) painter = new AliMpPCBPainter((AliMpPCB *)object); else if (object->InheritsFrom(AliMpSlat::Class())) diff --git a/MUON/mapping/macros/testGraphicsSlat.C b/MUON/mapping/macros/testGraphicsSlat.C index 2b865dce645..5e0703d9576 100644 --- a/MUON/mapping/macros/testGraphicsSlat.C +++ b/MUON/mapping/macros/testGraphicsSlat.C @@ -26,9 +26,37 @@ #include "AliMpSt345Reader.h" #include "AliMpSlat.h" #include "AliMpVPainter.h" - +#include "AliMpMotifReader.h" +#include "AliMpMotifType.h" +#include "AliMpMotifPosition.h" +#include "AliMpMotif.h" +#include "TVector2.h" +#include "TCanvas.h" #endif +void testGraphicsMotif(Option_t* motifType = "R43", const TVector2& padSizes = TVector2(2.5,0.5)) +{ + // Warning : this function leaks memory. But should be fine as only used + // interactively to check a few motifs at once... + // + AliMpMotifReader reader(kStation345,kBendingPlane); + AliMpMotifType* type = reader.BuildMotifType(motifType); + if (!type) + { + cerr << "Motif not found" << endl; + return; + } + AliMpMotif* motif = new AliMpMotif(motifType,type,padSizes); + AliMpMotifPosition* pos = new AliMpMotifPosition(0,motif,TVector2(0,0)); + AliMpVPainter* painter = AliMpVPainter::CreatePainter(pos); + if (!painter) + { + cerr << "Could not get a painter !" << endl; + return; + } + TCanvas* c = new TCanvas(); + painter->Draw("MP"); +} //112230N //112233NR3 -- 2.43.0