#include "AliEveTRDLoaderImp.h"
#include "AliEveTRDModuleImp.h"
+#include "EveBase/AliEveEventManager.h"
#include <TEveManager.h>
#include "AliLog.h"
#include "AliRun.h"
#include "AliRunLoader.h"
-//#include "AliLoader.h"
#include "AliTRDrawData.h"
+#include "AliTRDrawStream.h"
+#include "AliTRDdigitsManager.h"
#include "AliRawReaderRoot.h"
#include "AliRawReaderDate.h"
-#include "AliTRDv1.h"
-#include "AliTRDhit.h"
-//#include "AliTRDdigitsManager.h"
-
ClassImp(AliEveTRDLoaderSim)
ClassImp(AliEveTRDLoaderRaw)
ClassImp(AliEveTRDLoaderSimEditor)
//______________________________________________________________________________
AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) :
- AliEveTRDLoader(n, t),
- fRunLoader(0)
+ AliEveTRDLoader(n, t)
+ ,fRunLoader(0x0)
{
// Constructor.
+ if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked();
}
//______________________________________________________________________________
AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
return kFALSE;
}
- if(!fLoadHits && !fLoadDigits && !fLoadClusters && !fLoadTracks){
+ if(!fDataType){
AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
return kFALSE;
}
if(fRunLoader->GetEvent(ev)) return kFALSE;
TTree *t = 0;
- if(fLoadHits){
+ if(fDataType&kTRDHits){
fRunLoader->LoadHits("TRD", "READ");
t = fRunLoader->GetTreeH("TRD", kFALSE);
if(!t) return kFALSE;
- fTRD->SetTreeAddress();
if(!LoadHits(t)) return kFALSE;
}
- if(fLoadDigits){
+ if(fDataType&kTRDDigits){
fRunLoader->LoadDigits("TRD", "READ");
t = fRunLoader->GetTreeD("TRD", kFALSE);
if(!t) return kFALSE;
- fTRD->SetTreeAddress();
if(!LoadDigits(t)) return kFALSE;
}
- if(fLoadClusters){
+ if(fDataType&kTRDClusters){
fRunLoader->LoadRecPoints("TRD", "READ");
t = fRunLoader->GetTreeR("TRD", kFALSE);
if(!t) return kFALSE;
if(!LoadClusters(t)) return kFALSE;
}
- if(fLoadTracks){
+ if(fDataType&kTRDTracklets){
fRunLoader->LoadTracks("TRD", "READ");
t = fRunLoader->GetTreeT("TRD", kFALSE);
if(!t) return kFALSE;
}
-//______________________________________________________________________________
-Bool_t AliEveTRDLoaderSim::LoadHits(TTree *tH)
-{
- // Load hits.
-
- Info("LoadHits()", "Loading ...");
- if(!fChildren.size()) return kTRUE;
-
- AliEveTRDChamber *chmb = 0x0;
- AliTRDhit *hit = 0x0;
- Int_t d;
- for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
- gAlice->ResetHits();
- if(!tH->GetEvent(iTrack)) continue;
- hit = (AliTRDhit*)fTRD->FirstHit(-1);
- if(!hit) continue;
- d = hit->GetDetector();
- chmb = GetChamber(d);
- while(hit){
- if(d != hit->GetDetector()){
- d = hit->GetDetector();
- chmb = GetChamber(d);
- }
- if(chmb) chmb->AddHit(hit);
- hit = (AliTRDhit*)fTRD->NextHit();
- }
- }
- return kTRUE;
-}
-
//______________________________________________________________________________
Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
{
// Open file in given dir.
- fFilename = filename;
- fDir = dir;
- fDir += "/";
-
- fRunLoader = AliRunLoader::GetRunLoader();
+ if(fRunLoader) return kTRUE;
+
+ fRunLoader = AliRunLoader::Instance();
if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
- AliConfig::GetDefaultEventFolderName(),"read");
- if(!fRunLoader){
- AliError("Couldn't find run loader");
- return kFALSE;
- }
- fRunLoader->SetDirName(fDir);
+ AliConfig::GetDefaultEventFolderName(),"read");
+ if(!fRunLoader) return kFALSE;
gAlice = fRunLoader->GetAliRun();
if(!gAlice) fRunLoader->LoadgAlice();
- if(!gAlice){
- AliError("Couldn't find gAlice object");
- return kFALSE;
- }
- fTRD = (AliTRDv1*)gAlice->GetDetector("TRD");
- if(!fTRD){
- AliError("Couldn't find TRD");
- return kFALSE;
- }
+ if(!gAlice) return kFALSE;
+
+ fFilename = filename;
+ fDir = dir;
+ fDir += "/";
+ fRunLoader->SetDirName(fDir);
+ SetDataLinked();
return kTRUE;
}
//______________________________________________________________________________
AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
- AliEveTRDLoader(n, t),
- fRawDateReader (0),
- fRawRootReader (0),
- fRaw (0),
- fDataRoot (kTRUE),
- fEventOld (-1)
+ AliEveTRDLoader(n, t)
+ ,fRawDateReader (0x0)
+ ,fRawRootReader (0x0)
+ ,fRaw (0x0)
+ ,fEventCnt(-1)
{
// Constructor.
}
if(fRaw) delete fRaw;
fRaw = new AliTRDrawData();
- if(fDataRoot){
+ if(fDataType&kTRDRawRoot){
if(fRawRootReader) delete fRawRootReader;
fRawRootReader = new AliRawReaderRoot(filename);
- } else {
+ } else if(fDataType&kTRDRawDate){
if(fRawDateReader) delete fRawDateReader;
fRawDateReader = new AliRawReaderDate(fDir+fFilename);
+ } else {
+ AliError("No data type was set.");
+ return kFALSE;
}
-
+ SetDataLinked();
return kTRUE;
}
-//______________________________________________________________________________
-void AliEveTRDLoaderRaw::SetDataType(TRDDataTypes type)
-{
- // Set data type.
-
- fDataRoot = (type == kRawRoot) ? kTRUE : kFALSE;
-}
//______________________________________________________________________________
Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
{
// Go to given event.
+ //AliInfo(Form("Event %d %d %d", ev, fEvent, fEventCnt));
+
+
if(!fChildren.size()){
AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
return kFALSE;
static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
-
- if(ev == fEventOld) return kTRUE;
- Bool_t checkEnd;
- if(ev < fEventOld) {
+ fEvent = ev;
+ if(ev == fEventCnt) return kTRUE;
+ if(ev < fEventCnt) {
fRawRootReader->RewindEvents();
- fEventOld = -1;
- checkEnd = kFALSE;
- } else checkEnd = kTRUE;
+ fEventCnt = -1;
+ }
- do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0));
+ Bool_t FOUND = kFALSE;
+ while(fRawRootReader->NextEvent()){
+ fEventCnt++;
+ if(fEventCnt == ev){
+ FOUND = kTRUE;
+ break;
+ }
+ }
+ if(!FOUND) return kFALSE;
+
LoadEvent();
gEve->Redraw3D();
return kTRUE;
}
+
//______________________________________________________________________________
Bool_t AliEveTRDLoaderRaw::LoadEvent()
{
// Load event.
-
- Info("LoadEvent()", "Loading ...");
+ AliInfo("Loading ...");
static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
fRawRootReader->Reset();
+ fRawRootReader->SelectEquipment(0, 1024, 1041);
+ fRawRootReader->Select("TRD");
+
+// AliTRDrawStream::AllowCorruptedData();
+// AliTRDrawStream::DisableStackNumberChecker();
+// AliTRDrawStream::DisableStackLinkNumberChecker();
+
+ AliTRDrawStream *pinput = new AliTRDrawStream(fRawRootReader);
+ AliTRDrawStream &input = *pinput;
+
+ // AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
AliEveTRDChamber *chmb;
- AliTRDdigitsManager *dm;
- dm = fRaw->Raw2Digits(fRawRootReader);
+ AliTRDdigitsManager *dm = new AliTRDdigitsManager();
+ dm->CreateArrays();
- for(int idet=0; idet<540; idet++){
- if(!(chmb=GetChamber(idet))) continue;
+ Int_t det = 0;
+ while ((det = input.NextChamber(dm)) >= 0){
+ if(!(chmb=GetChamber(det))) continue;
chmb->LoadDigits(dm);
+
+ dm->RemoveDigits(det);
+ dm->RemoveDictionaries(det);
+ dm->ClearIndexes(det);
}
- return kTRUE;
-}
-//______________________________________________________________________________
-void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
-{
- // Go to next event.
- static const TEveException kEH("AliEveTRDLoader::NextEvent ");
- if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
+ delete pinput;
+ pinput = NULL;
- if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld;
- else {
- if(fEventOld == -1) throw(kEH + "no events available.");
- if(rewindOnEnd) {
- Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld));
- fRawRootReader->RewindEvents();
- fRawRootReader->NextEvent();
- fEventOld = 0;
- } else throw(kEH + "last event reached.");
- }
+ return kTRUE;
}
//______________________________________________________________________________
AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
UInt_t options, Pixel_t back) :
- TGedFrame(p, width, height, options | kVerticalFrame, back),
- fM(0), fLoadHits(0), fLoadDigits(0), fLoadClusters(0), fLoadTracks(0)
+ TGedFrame(p, width, height, options | kVerticalFrame, back)
+ ,fM(0x0)
+ ,fCheckedHits(0x0)
+ ,fCheckedDigits(0x0)
+ ,fCheckedClusters(0x0)
+ ,fCheckedTracklets(0x0)
{
// Constructor.
// "Data selector" group frame
TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
- fLoadHits = new TGCheckButton(fGroupFrame," Hits");
- fLoadHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=0)");
- fGroupFrame->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+ fCheckedHits = new TGCheckButton(fGroupFrame," Hits");
+ fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits));
+ fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
- fLoadDigits = new TGCheckButton(fGroupFrame," Digits");
- fLoadDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=1)");
- fGroupFrame->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+ fCheckedDigits = new TGCheckButton(fGroupFrame," Digits");
+ fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits));
+ fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
- fLoadClusters = new TGCheckButton(fGroupFrame," Clusters");
- fLoadClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=2)");
- fGroupFrame->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+ fCheckedClusters = new TGCheckButton(fGroupFrame," Clusters");
+ fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters));
+ fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
- fLoadTracks = new TGCheckButton(fGroupFrame," Tracklets ");
- fLoadTracks->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=3)");
- fGroupFrame->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+ fCheckedTracklets = new TGCheckButton(fGroupFrame," Tracklets ");
+ fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets));
+ fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
// fGroupFrame->Resize(164,116);
{
// Set model object.
- fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
+ if(!(fM = dynamic_cast<AliEveTRDLoaderSim*>(obj))) return;
- Bool_t kFile = kTRUE;
- if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE;
+ Bool_t kRL = (fM->IsDataLinked()) ? kTRUE : kFALSE;
- fLoadHits->SetEnabled(kFile);
- if(kFile) fLoadHits->SetState(fM->fLoadHits ? kButtonDown : kButtonUp);
- fLoadDigits->SetEnabled(kFile);
- if(kFile) fLoadDigits->SetState(fM->fLoadDigits ? kButtonDown : kButtonUp);
- fLoadClusters->SetEnabled(kFile);
- if(kFile) fLoadClusters->SetState(fM->fLoadClusters ? kButtonDown : kButtonUp);
- fLoadTracks->SetEnabled(kFile);
- if(kFile) fLoadTracks->SetState(fM->fLoadTracks ? kButtonDown : kButtonUp);
+ fCheckedHits->SetEnabled(kRL);
+ if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp);
+ fCheckedDigits->SetEnabled(kRL);
+ if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp);
+ fCheckedClusters->SetEnabled(kRL);
+ if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp);
+ fCheckedTracklets->SetEnabled(kRL);
+ if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp);
}
//______________________________________________________________________________
// Toggle given button id.
switch(id){
- case 0:
- fM->fLoadHits = fLoadHits->IsDown() ? kTRUE : kFALSE;
- break;
- case 1:
- fM->fLoadDigits = fLoadDigits->IsDown() ? kTRUE : kFALSE;
- break;
- case 2:
- fM->fLoadClusters = fLoadClusters->IsDown() ? kTRUE : kFALSE;
- break;
- case 3:
- fM->fLoadTracks = fLoadTracks->IsDown() ? kTRUE : kFALSE;
- break;
+ case AliEveTRDLoader::kTRDHits:
+ fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0;
+ break;
+ case AliEveTRDLoader::kTRDDigits:
+ fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0;
+ break;
+ case AliEveTRDLoader::kTRDClusters:
+ fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0;
+ break;
+ case AliEveTRDLoader::kTRDTracklets:
+ fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0;
+ break;
}
}
+