// ------------------------------------------------------------------------- // ----- CbmTrdDigiDraw source file ----- // ----- Created 03/01/08 by M. Al-Turany ----- // ------------------------------------------------------------------------- #include "CbmTrdDigiDraw.h" #include "CbmTrdAddress.h" // for CbmTrdAddress #include "CbmTrdDigi.h" // for CbmTrdDigi #include "CbmTrdParModDigi.h" // for CbmTrdParModDigi #include "CbmTrdParSetDigi.h" // for CbmTrdParSetDigi #include // for Logger, LOG #include // for FairEventManager #include // for FairRootManager #include // for FairRunAna #include // for FairRuntimeDb #include // for TClonesArray #include // for TEveBoxSet, TEveBoxSet::kBT_AABox #include // for TEveManager, gEve #include // for TVector3 #include // for setprecision using std::setprecision; // ----- Default constructor ------------------------------------------- CbmTrdDigiDraw::CbmTrdDigiDraw() : FairTask(), fVerbose(0), fPointList(nullptr), fDigiPar(nullptr), fModuleInfo(nullptr), fEventManager(nullptr), fq(nullptr), fColor(), fStyle(), fActiveLayers() { } // ------------------------------------------------------------------------- // ----- Standard constructor ------------------------------------------ CbmTrdDigiDraw::CbmTrdDigiDraw(const char* name, Color_t color ,Style_t mstyle,Int_t iVerbose) : FairTask(name, iVerbose), fVerbose(iVerbose), fPointList(nullptr), fDigiPar(nullptr), fModuleInfo(nullptr), fEventManager(nullptr), fq(nullptr), fColor(color), fStyle(mstyle), fActiveLayers() { for(Int_t i=0; i<15; i++){ fActiveLayers[i]=kTRUE; } } // ---- Initialisation ---------------------------------------------- void CbmTrdDigiDraw::SetParContainers() { LOG(debug) <<" * CbmTrdDigiDraw * :: SetParContainers() "; // Get Base Container FairRunAna* ana = FairRunAna::Instance(); FairRuntimeDb* rtdb=ana->GetRuntimeDb(); fDigiPar = (CbmTrdParSetDigi*)(rtdb->getContainer("CbmTrdParSetDigi")); } // -------------------------------------------------------------------- // ------------------------------------------------------------------------- InitStatus CbmTrdDigiDraw::Init() { LOG(debug) << "CbmTrdDigiDraw::Init()"; FairRootManager* fManager = FairRootManager::Instance(); fPointList = (TClonesArray *)fManager->GetObject(GetName()); if(fPointList==0){ LOG(warn) << "CbmTrdDigiDraw::Init() branch " << GetName() << " Not found! Task will be deactivated "; SetActive(kFALSE); } LOG(debug1) << "CbmTrdDigiDraw::Init() get track list" << fPointList; fEventManager =FairEventManager::Instance(); LOG(debug1) << "CbmTrdDigiDraw::Init() get instance of FairEventManager "; fq =0; // gEve->AddElement(fq, fEventManager ); return kSUCCESS; } // ------------------------------------------------------------------------- void CbmTrdDigiDraw::Exec(Option_t* /*option*/) { if (IsActive()){ CbmTrdDigi *digi=0; Int_t npoints=fPointList->GetEntriesFast(); Reset(); TEveBoxSet *q = new TEveBoxSet(GetName(),""); q->Reset(TEveBoxSet::kBT_AABox, kTRUE, npoints); q->SetMainColor(kBlue); // q->SetMainAlpha(1.); // q->SetMarkerSize(1.5); // q->SetMarkerStyle(fStyle); // q->SetDefDepth(); // q->SetDefHeight(); // q->SetDefDepth(); Int_t refCounter=0; for (Int_t i=0; iAt(i); if(digi!=0) { //Double_t ELoss = digi-> GetCharge(); Int_t address = digi->GetAddress(); Int_t Col = CbmTrdAddress::GetColumnId(address); Int_t Row = CbmTrdAddress::GetRowId(address); Int_t Sector = CbmTrdAddress::GetSectorId(address); Int_t moduleId = CbmTrdAddress::GetModuleAddress(address); Int_t layerId = CbmTrdAddress::GetLayerId(address); fModuleInfo = (CbmTrdParModDigi*)fDigiPar->GetModulePar(moduleId); TVector3 posHit, padSize; fModuleInfo->GetPosition(/*moduleId, */Sector, Col, Row, posHit, padSize); // The given point is used as the edge of the box but it is // the middle point of the pad. So we have to do a transformation Double_t X = posHit.X()-(padSize.X()/2); Double_t Y = posHit.Y()-(padSize.Y()/2); // LOG(bebug1)<<"*** CbmTrdHitProducerDigi::CalculateHitPosition ***"; LOG(debug1)<<"Col: "<< Col; LOG(debug1)<<"Row: "<< Row; LOG(debug1)<AddBox(X,Y,posHit.Z(), padSize.X(), padSize.Y(), 0.); refCounter++; } } } gEve->AddElement(q); gEve->Redraw3D(kFALSE); fq=q; } } // ----- Destructor ---------------------------------------------------- CbmTrdDigiDraw::~CbmTrdDigiDraw() { } // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- /** Action after each event**/ void CbmTrdDigiDraw::Finish() { } // ------------------------------------------------------------------------- void CbmTrdDigiDraw::Reset() { if(fq!=0){ fq->Reset(); gEve->RemoveElement(fq, fEventManager ); } } void CbmTrdDigiDraw::SetActiveLayer(Bool_t Layer1, Bool_t Layer2, Bool_t Layer3, Bool_t Layer4, Bool_t Layer5, Bool_t Layer6, Bool_t Layer7, Bool_t Layer8, Bool_t Layer9, Bool_t Layer10, Bool_t Layer11, Bool_t Layer12, Bool_t Layer13, Bool_t Layer14, Bool_t Layer15) { fActiveLayers[0]=Layer1; fActiveLayers[1]=Layer2; fActiveLayers[2]=Layer3; fActiveLayers[3]=Layer4; fActiveLayers[4]=Layer5; fActiveLayers[5]=Layer6; fActiveLayers[6]=Layer7; fActiveLayers[7]=Layer8; fActiveLayers[8]=Layer9; fActiveLayers[9]=Layer10; fActiveLayers[10]=Layer11; fActiveLayers[11]=Layer12; fActiveLayers[12]=Layer13; fActiveLayers[13]=Layer14; fActiveLayers[14]=Layer15; } ClassImp(CbmTrdDigiDraw)