-Fixed bug in offline buffer that deleted event object.
authorslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 4 Nov 2010 09:54:51 +0000 (09:54 +0000)
committerslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 4 Nov 2010 09:54:51 +0000 (09:54 +0000)
EVE/EveHLT/AliEveEventBuffer.cxx
EVE/EveHLT/AliEveEventBuffer.h
EVE/EveHLT/AliEveEventBufferOffline.cxx
EVE/EveHLT/AliEveHLTEventManager.cxx
EVE/EveHLT/AliEveHLTEventManagerOffline.cxx
EVE/EveHLT/AliEveHLTEventManagerOffline.h
EVE/hlt-macros/off.C

index 096e73e..eea002f 100644 (file)
@@ -22,20 +22,19 @@ AliEveEventBuffer::AliEveEventBuffer() :
   fCurrentEvent(NULL),
   fBIndex(),
   fTimer(NULL),
-  fThread(NULL),
   fEventId(),
   fBufferMonStarted(kFALSE)
  {
   // see header file for class documentation
-  fEventBuffer = new TObjArray(10, 0);
-  fEventBuffer->SetOwner(kTRUE);
+  fEventBuffer = new TObjArray(fBufferSize, 0);
+  fEventBuffer->SetOwner(kFALSE);
   
   for(int id = 0; id < kSize; id++) {
     fBIndex[id] = -1;
   }
   
   fTimer = new TTimer();
-  fTimer->Connect("Timeout()", "AliEveEventBuffer", this, "MonitorBuffer()");
+  fTimer->Connect("Timeout()", "AliEveEventBuffer", this, "CreateBufferThread()");
 
   fEventId = new Int_t[fBufferSize];
 
@@ -60,12 +59,25 @@ AliEveEventBuffer::~AliEveEventBuffer() {
 
 }
 
+void AliEveEventBuffer::CreateBufferThread() {
+  cout << "hereherehere"<<endl;
+  TThread * fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) this);
+  fThread->Run();
+
+}
+
 ///___________________________________________________________________________
 void * AliEveEventBuffer::BufferThread(void * buffer) {
+  cout <<"BufferThread : " <<endl;
   if(buffer) {
-    if (!reinterpret_cast<AliEveEventBuffer*>(buffer)->GetBufferMonStarted()) {
-      reinterpret_cast<AliEveEventBuffer*>(buffer)->StartBufferMonitor();
+    if (!reinterpret_cast<AliEveEventBuffer*>(buffer)->GetBusy()) {
+      reinterpret_cast<AliEveEventBuffer*>(buffer)->MonitorBuffer();
+    } else {
+      cout << "busy"<<endl;
     }
+    
+  } else {
+    cout << "no buffer"<<endl;
   }
   return (void*)0;
 }
@@ -93,14 +105,16 @@ void AliEveEventBuffer::MonitorBuffer() {
 ///_______________________________________________________________________________
 TObject * AliEveEventBuffer::NextEvent() {
   //See header file for documentation
-  if(fBusy) {
-    cout << "Event Buffer busy"<<endl;
-    return NULL;
-  }
-  else SetBusy(kTRUE);
   cout << "In enxtevent"<<endl;
+
+
+  // if(fBusy) {
+  //   cout << "Event Buffer busy"<<endl;
+  //   return NULL;
+  // }
+  //  else SetBusy(kTRUE);
   TObject * nextEvent = GetNextUnSeen();
-  SetBusy(kFALSE);
+  //SetBusy(kFALSE);
   return nextEvent;
 }
 
@@ -138,7 +152,7 @@ TObject * AliEveEventBuffer::Fwd() {
 ///________________________________________________________________________________
 TObject * AliEveEventBuffer::GetNextUnSeen() {
   //See header file for documentation
-  cout << "GetNextUnSeend"<<endl;
+  cout << "GetNextUnSeen"<<endl;
   PrintIndeces();
   if(CalculateDifference(fBIndex[kTop], fBIndex[kLast])) {
     fBIndex[kLast] = CalculateNext(fBIndex[kLast]);
@@ -183,8 +197,9 @@ void AliEveEventBuffer::AddToBuffer(TObject * event) {
 
   fBIndex[kTop] = CalculateNext(fBIndex[kTop]);
   //Delete the event already there (ok to delete as object, not aliesdevent, TList?)
-  TObject * object = fEventBuffer->At(fBIndex[kTop]);
-  if (object) delete object;
+  //TObject * object = fEventBuffer->At(fBIndex[kTop]);
+  fEventBuffer->RemoveAt(fBIndex[kTop]);
+  //if (object) delete object;
   fEventBuffer->AddAt(event, fBIndex[kTop]);
 }
 
@@ -228,11 +243,13 @@ Int_t AliEveEventBuffer::CalculateDifference(Int_t top, Int_t low) {
 void AliEveEventBuffer::StartBufferMonitor() {
   //cout << "NOT !!! starting buffer mon"<<endl;
   cout << "starting buffer mon"<<endl;
+  SetBufferMonStarted(kTRUE);
   fTimer->Start(5000);
 }
 ///___________________________________________________________________________________
 void AliEveEventBuffer::StopBufferMonitor() {
   cout << "Stopping buffer mon"<<endl;
+  SetBufferMonStarted(kFALSE);
   fTimer->Stop();
 }
 
index 24cf106..b88bbf5 100644 (file)
@@ -36,7 +36,8 @@ public:
 
   void SetBufferSize(Int_t bs) { fBufferSize = bs;}
   void SetBusy(Bool_t busy) { fBusy = busy;}
-
+  Bool_t GetBusy() { return fBusy;}
+  
   //Navigate the event buffer
   // TObject *  NavigateFwd();
   // TObject *  NavigateBack();
@@ -58,6 +59,9 @@ public:
 
   Int_t GetEventId() const { return fEventId[fBIndex[kCurrent]];}
 
+  void CreateBufferThread();
+
+
 protected:
   
   enum fBufferIndex {
@@ -108,6 +112,7 @@ private:
   /** assignment operator prohibited */
   AliEveEventBuffer& operator=(const AliEveEventBuffer&);
 
+  
 
   TObject *  GetNextUnSeen();
 
@@ -116,8 +121,6 @@ private:
 
   TTimer * fTimer;
 
-  TThread * fThread;
-
   //Current event id
   Int_t * fEventId;
   
index 65b7404..2c935aa 100644 (file)
@@ -84,12 +84,12 @@ TObject * AliEveEventBufferOffline::GetEventFromSource() {
   }
 
   //Copy event into new event (must be deleted when no longer needed in list!!
-  AliESDEvent * event = new AliESDEvent();
-  fEvent->Copy(*event);
-  cout << event->GetNumberOfCaloClusters() << endl;
+  //AliESDEvent * event = new AliESDEvent();
+  //fEvent->Copy(*event);
+  //cout << event->GetNumberOfCaloClusters() << endl;
 
-  if (event) {
-    return dynamic_cast<TObject*>(event);
+  if (fEvent) {
+    return dynamic_cast<TObject*>(fEvent);
   } else {
     cout << "error getting event" << endl;
     return NULL;
index 1b2f2ee..2364534 100644 (file)
@@ -126,6 +126,7 @@ void AliEveHLTEventManager::DestroyDetectorElements(){
   
 
 }
+
 ///_______________________________________________________________________________________
 void AliEveHLTEventManager::ConnectEventBuffer() {
   GetEventBuffer()->ConnectToSource();
@@ -135,13 +136,9 @@ void AliEveHLTEventManager::ConnectEventBuffer() {
 ///___________________________________________________________________________________________
 void AliEveHLTEventManager::StartBufferMonitor() { 
   AliEveEventBuffer * buffer = GetEventBuffer();
-  if(buffer) {
-    TThread * fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) buffer);
-    fThread->Run();
-  } else {
-    cout << "Buffer does not exist " << endl;
-  }
+  buffer->StartBufferMonitor();
 }
+
 //______________________________________________________________________________________________
 Int_t AliEveHLTEventManager::ProcessEvent(AliESDEvent * event) {
 
@@ -206,6 +203,7 @@ Int_t AliEveHLTEventManager::ProcessEvent(TList * blockList) {
   return 0;
 
 }
+///___________________________________________________________________________________________
 
 void AliEveHLTEventManager::ProcessBlock(AliHLTHOMERBlockDesc * block) {
   //See header file for documentation
index ce3040f..1c96d17 100644 (file)
@@ -16,7 +16,6 @@ ClassImp(AliEveHLTEventManagerOffline)
 
 AliEveHLTEventManagerOffline::AliEveHLTEventManagerOffline() : 
   AliEveHLTEventManager(),
-  fEvent(NULL),
   fEventBuffer(NULL)
 {
   // see header file for class documentation
@@ -29,7 +28,6 @@ AliEveHLTEventManagerOffline::AliEveHLTEventManagerOffline() :
 
 AliEveHLTEventManagerOffline::AliEveHLTEventManagerOffline(TString filename) : 
   AliEveHLTEventManager(),
-  fEvent(NULL),
   fEventBuffer(NULL)
 {
   // see header file for class documentation
@@ -46,10 +44,6 @@ AliEveHLTEventManagerOffline::~AliEveHLTEventManagerOffline() {
   //DestroyElements();
   //DestroyDetectorElements();  
 
-  if(fEvent)
-    delete fEvent;
-  fEvent = NULL;
-
   if(fEventBuffer)
     delete fEventBuffer;
   fEventBuffer = NULL;
@@ -58,20 +52,22 @@ AliEveHLTEventManagerOffline::~AliEveHLTEventManagerOffline() {
 
 void AliEveHLTEventManagerOffline::NextEvent() {
   //See header file for documentation
-  fEvent = dynamic_cast<AliESDEvent*>(fEventBuffer->NextEvent());
-  if(fEvent) {
-    //Int_t eventId = fBuffer->GetEventId();
-    ProcessEvent(fEvent);
-  } else {
-    cout << "couldn't get the event"<<endl;
+    AliESDEvent * event = dynamic_cast<AliESDEvent*>(fEventBuffer->NextEvent());
+
+    if(event) {
+      //Int_t eventId = fBuffer->GetEventId();
+      ProcessEvent(event);
+    } else {
+      cout << "couldn't get the event"<<endl;
+    }
   }
 }
 
 void AliEveHLTEventManagerOffline::NavigateFwd() {
   //See header file for documentation
-  fEvent = dynamic_cast<AliESDEvent*>(fEventBuffer->Fwd());
-  if(fEvent) {
-    ProcessEvent(fEvent);
+  AliESDEvent * event = dynamic_cast<AliESDEvent*>(fEventBuffer->Fwd());
+  if(event) {
+    ProcessEvent(event);
   } else {
     cout << "couldn't get the fwd event"<<endl;
   }
@@ -79,9 +75,9 @@ void AliEveHLTEventManagerOffline::NavigateFwd() {
 
 void AliEveHLTEventManagerOffline::NavigateBack() {
   //See header file for documentation
-  fEvent = dynamic_cast<AliESDEvent*>(fEventBuffer->Back());
-  if(fEvent) {
-    ProcessEvent(fEvent);
+  AliESDEvent * event = dynamic_cast<AliESDEvent*>(fEventBuffer->Back());
+  if(event) {
+    ProcessEvent(event);
   } else {
     cout << "couldn't get the back event"<<endl;
   }
index dba4aa1..e478660 100644 (file)
@@ -30,8 +30,6 @@ public:
 
   /** Process the event data */
   //Int_t ProcessEvent(AliESDEvent * event);
-  
-  AliESDEvent * fEvent;
   AliEveEventBufferOffline * fEventBuffer;
   AliEveEventBuffer * GetEventBuffer() {return fEventBuffer;}
 
index 45673ae..e3c738e 100644 (file)
@@ -214,7 +214,7 @@ void off ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) {
   // -------------------------\r
  \r
   gEventManager = new AliEveHLTEventManagerOffline("/home/slindal/alice/data/PbPb/AliESDs.root");\r
-  //gEventManager = new AliEveHLTEventManagerOffline("/home/slindal/alice/QAtasks/AliESDs.root");\r
+\r
   gEventManager->SetEveManager(gEve);\r
   gEventManager->SetGeoManager(gGeoManager);\r
   gEventManager->SetRPhiManager(gRPhiMgr);\r