* provided "as is" without express or implied warranty. *
**************************************************************************/
-//////////////////////////////////////////////////////////////////////////
-// //
-// Graphical User Interface utility class for the MUON trigger //
-// - digits maps of the trigger chambers //
-// //
-//////////////////////////////////////////////////////////////////////////
+// $Id$
+
+//-----------------------------------------------------------------------------
+/// \class AliMUONTriggerGUIdimap
+///
+/// The digit maps of the four trigger chambers, all boards
+///
+/// \author Bogdan Vulpescu, LPC Clermont-Ferrand
+//-----------------------------------------------------------------------------
#include <TCanvas.h>
-#include <TGFrame.h>
#include <TGButton.h>
#include <TGTab.h>
#include <TRootEmbeddedCanvas.h>
#include <TBox.h>
-#include <TClonesArray.h>
#include <TPave.h>
#include <TPaveText.h>
#include <TStyle.h>
#include <TObjArray.h>
-#include "AliRun.h"
+#include "AliRunLoader.h"
-#include "AliMUON.h"
-#include "AliMUONDigit.h"
+#include "AliMUONVDigit.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliMUONGeometryTransformer.h"
-#include "AliMUONData.h"
+#include "AliMUONMCDataInterface.h"
#include "AliMUONTriggerGUIboard.h"
#include "AliMUONTriggerGUIdimap.h"
+#include "AliMUONDigitStoreV1.h"
+
/// \cond CLASSIMP
ClassImp(AliMUONTriggerGUIdimap)
/// \endcond
//__________________________________________________________________________
-AliMUONTriggerGUIdimap::AliMUONTriggerGUIdimap(AliLoader *loader, TObjArray *boards, const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h)
- : TObject(),
- fQObject(),
+AliMUONTriggerGUIdimap::AliMUONTriggerGUIdimap(TObjArray *boards, const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h)
+ : TGFrame(0),
fMain(0),
fLoader(0),
- fMUONData(0),
+ fMCDataInterface(0),
+ fRawDigitStore(0),
fBoards(0),
fIsOn(0)
{
/// frame constructor
- fLoader = loader;
fIsOn = kTRUE;
fBoards = boards;
- fMUONData = new AliMUONData(loader,"MUON","MUON");
- fMUONData->SetTreeAddress("D");
-
gStyle->SetPadLeftMargin(0.05);
gStyle->SetPadRightMargin(0.05);
gStyle->SetPadTopMargin(0.05);
fMain->MapWindow();
- DrawMaps(11);
- DrawMaps(12);
- DrawMaps(13);
- DrawMaps(14);
-
}
//__________________________________________________________________________
}
}
- delete fMUONData;
fMain->DeleteWindow();
}
//__________________________________________________________________________
-AliMUONTriggerGUIdimap::AliMUONTriggerGUIdimap(const AliMUONTriggerGUIdimap& dimap)
- : TObject(),
- fQObject(),
- fMain(0),
- fLoader(0),
- fMUONData(0),
- fBoards(0),
- fIsOn(0)
-{
- /// copy constructor
-
- dimap.Dump();
- Fatal("AliMUONTriggerGUIdimap","copy constructor not implemented");
-
-}
-
-//__________________________________________________________________________
-AliMUONTriggerGUIdimap & AliMUONTriggerGUIdimap::operator=(const AliMUONTriggerGUIdimap& dimap)
+void AliMUONTriggerGUIdimap::DrawAllMaps()
{
- /// asignment operator
+ /// draw maps
- dimap.Dump();
- Fatal("AliMUONTriggerGUIdimap","assignment operator not implemented");
+ if (fLoader == 0x0) {
+ //return;
+ }
+ if (fMCDataInterface == 0x0) {
+ //return;
+ }
- return *this;
+ DrawMaps(11);
+ DrawMaps(12);
+ DrawMaps(13);
+ DrawMaps(14);
}
{
/// draw the digits map for chamber-
- TString mapspath = gSystem->Getenv("ALICE_ROOT");
- mapspath.Append("/MUON/data");
+ Bool_t drawDigits = kTRUE;
+ Bool_t drawDigitsRaw = kTRUE;
+ if (fLoader == 0x0) {
+ drawDigits = kFALSE;
+ }
+ if (fRawDigitStore == 0x0) {
+ drawDigitsRaw = kFALSE;
+ }
+
+ AliMUONTriggerGUIboard *board;
TCanvas *canvas = fEc[chamber-11]->GetCanvas();
canvas->cd();
canvas->Clear();
- AliMUONDigit *mdig;
- AliMpPad mpad;
-
- AliRunLoader *runLoader = fLoader->GetRunLoader();
- gAlice = runLoader->GetAliRun();
- AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
- const AliMUONGeometryTransformer* kGeomTransformer = pMUON->GetGeometryTransformer();
-
- TClonesArray *muonDigits = fMUONData->Digits(chamber-1);
- if (muonDigits == 0) { printf("No muonDigits \n"); return; }
- gAlice->ResetDigits();
- fMUONData->GetDigits();
- Int_t nDigits = muonDigits->GetEntriesFast();
-
TPaveText *label;
TBox *boxd;
- Char_t fntxt[6], name[8], cln[2];
+ Char_t cln[2];
Int_t detElemId, cathode, ix, iy, charge, color;
- Int_t side, col, line, nbx;
Int_t holdS, holdL, holdC;
- Float_t xCenter, yCenter, zCenter, xWidth, yWidth, holdXC, holdYC;
+ Float_t xCenter, yCenter, xWidth, yWidth, holdXC, holdYC;
Float_t xMin, xMax, yMin, yMax;
Float_t ptx1, ptx2, pty1, pty2;
Float_t xpmin, xpmax, ypmin, ypmax;
// draw the boards
- sprintf(fntxt,"%s/guimapp%2d.txt",mapspath.Data(),chamber);
- FILE *ftxt = fopen(fntxt,"r");
-
for (Int_t ib = 0; ib < kNBoards; ib++) {
- fscanf(ftxt,"%d %d %d %d %f %f %f %f %f %s \n",
- &side,&col,&line,&nbx,
- &xCenter,&yCenter,&xWidth,&yWidth,&zCenter,
- &name[0]);
+ board = (AliMUONTriggerGUIboard*)fBoards->At(ib);
- //printf("%d %d %d %d %f %f %f %f %f %s \n",side,col,line,nbx,xCenter,yCenter,xWidth,yWidth,zCenter,name);
+ holdS = board->GetSide();
+ holdC = board->GetCol();
+ holdL = board->GetLine();
- holdS = side;
- holdC = col;
- holdL = line;
+ xCenter = board->GetXCenter(chamber-11);
+ yCenter = board->GetYCenter(chamber-11);
+ xWidth = board->GetXWidth(chamber-11);
+ yWidth = board->GetYWidth(chamber-11);
holdXC = xCenter;
holdYC = yCenter;
}
- fclose(ftxt);
-
// draw digits set from the board GUI
- AliMUONTriggerGUIboard *board;
Int_t imt = chamber -11;
Int_t nStripX, nStripY;
TBox *box;
}
- // draw the digits
+ // draw the digits from galice
- for (Int_t id = 0; id < nDigits; id++) {
-
- mdig = (AliMUONDigit*)muonDigits->UncheckedAt(id);
-
- cathode = mdig->Cathode()+1;
-
- ix=mdig->PadX();
- iy=mdig->PadY();
- detElemId=mdig->DetElemId();
- charge = (Int_t)mdig->Signal();
- color = 261+5*(charge-1);
- if (color > 282) color = 282;
+ if (drawDigits || drawDigitsRaw) {
+
+ AliMUONGeometryTransformer transformer;
+ transformer.LoadGeometryData("transform.dat");
- const AliMpVSegmentation* seg2 = AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::GetCathodType(cathode-1));
+ AliMUONVDigitStore *digitStore = 0x0;
- mpad = seg2->PadByIndices(AliMpIntPair(ix,iy),kTRUE);
+ if (drawDigits) {
+ AliRunLoader *runLoader = fLoader->GetRunLoader();
+ digitStore = fMCDataInterface->DigitStore(runLoader->GetEventNumber());
+ }
+ if (drawDigitsRaw) {
+ digitStore = fRawDigitStore;
+ }
- // get the pad position and dimensions
- Float_t xlocal1 = mpad.Position().X();
- Float_t ylocal1 = mpad.Position().Y();
- Float_t xlocal2 = mpad.Dimensions().X();
- Float_t ylocal2 = mpad.Dimensions().Y();
+ TIter next(digitStore->CreateIterator());
+ AliMUONVDigit* mdig;
- kGeomTransformer->Local2Global(detElemId, xlocal1, ylocal1, 0, xg1, yg1, zg1);
- // (no transformation for pad dimensions)
- xg2 = xlocal2;
- yg2 = ylocal2;
-
- // transform in the monitor coordinate system
- //xpmin = -(xg1+xg2);
- //xpmax = -(xg1-xg2);
- //ypmin = -(yg2-yg1);
- //ypmax = +(yg2+yg1);
- // ALICE SC
- xpmin = +(xg1-xg2);
- xpmax = +(xg1+xg2);
- ypmin = -(yg2-yg1);
- ypmax = +(yg2+yg1);
-
- boxd = new TBox(xpmin,ypmin,xpmax,ypmax);
- boxd->SetBit(kCannotPick);
- boxd->SetFillStyle(1001);
- boxd->SetFillColor(2);
- boxd->Draw();
+ while ( ( mdig = static_cast<AliMUONVDigit*>(next()) ) ) {
+
+ cathode = mdig->Cathode()+1;
+
+ ix=mdig->PadX();
+ iy=mdig->PadY();
+ detElemId=mdig->DetElemId();
+ charge = (Int_t)mdig->Charge();
+ color = 261+5*(charge-1);
+ if (color > 282) color = 282;
+
+ if (detElemId/100 != chamber) continue;
+
+ const AliMpVSegmentation* seg2 = AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::GetCathodType(cathode-1));
+
+ AliMpPad mpad = seg2->PadByIndices(ix,iy,kTRUE);
+
+ // get the pad position and dimensions
+ Float_t xlocal1 = mpad.GetPositionX();
+ Float_t ylocal1 = mpad.GetPositionY();
+ Float_t xlocal2 = mpad.GetDimensionX();
+ Float_t ylocal2 = mpad.GetDimensionY();
+
+ transformer.Local2Global(detElemId, xlocal1, ylocal1, 0, xg1, yg1, zg1);
+ // (no transformation for pad dimensions)
+ xg2 = xlocal2;
+ yg2 = ylocal2;
+
+ // transform in the monitor coordinate system
+ // ALICE SC
+ xpmin = +(xg1-xg2);
+ xpmax = +(xg1+xg2);
+ ypmin = -(yg2-yg1);
+ ypmax = +(yg2+yg1);
+
+ boxd = new TBox(xpmin,ypmin,xpmax,ypmax);
+ boxd->SetBit(kCannotPick);
+ boxd->SetFillStyle(1001);
+ boxd->SetFillColor(2);
+ boxd->Draw();
+
+ } // end digits loop
- } // end digits loop
-
+ } // end draw digits
+
canvas->Modified();
canvas->Update();
{
/// update maps for another run/event
- //fMUONData->SetLoader(fLoader);
- fMUONData = new AliMUONData(fLoader,"MUON","MUON");
- fMUONData->SetTreeAddress("D");
-
for (Int_t it = 0; it < kNMT; it++) {
for (Int_t ib = 0; ib < kNBoards; ib++) {
delete fPaveBoard[it][ib];