#include "AliMUONRawCluster.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONGlobalTrigger.h"
-#include "AliMUONRecoEvent.h"
#include "AliMUONSegment.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackHit.h"
// Is 10 the right size ????
fRecTracksPtr = new TClonesArray("AliMUONTrack", 10);
fNRecTracks = 0; // really needed or GetEntriesFast sufficient ????
-// trigger tracks
- fRecTriggerTracksPtr = new TClonesArray("AliMUONTriggerTrack", 10);
- fNRecTriggerTracks = 0; // really needed or GetEntriesFast sufficient ????
// Memory allocation for the TClonesArray of hits on reconstructed tracks
// Is 100 the right size ????
//AZ fRecTrackHitsPtr = new TClonesArray("AliMUONTrack", 100);
fBkgTrackRefParticles = 0;
fBkgTrackRefTTR = 0;
fBkgTrackRefEventNumber = -1;
-
- // Initialize to 0 pointers to RecoEvent, tree and tree file
- fRecoEvent = 0;
- fEventTree = 0;
- fTreeFile = 0;
-
+
// initialize loader's
fLoader = loader;
AliMUONEventReconstructor::~AliMUONEventReconstructor(void)
{
// Destructor for class AliMUONEventReconstructor
- if (fTreeFile) {
- fTreeFile->Close();
- delete fTreeFile;
- }
-// if (fEventTree) delete fEventTree;
- if (fRecoEvent) delete fRecoEvent;
delete fHitsForRecPtr; // Correct destruction of everything ???? or delete [] ????
for (Int_t st = 0; st < AliMUONConstants::NTrackingCh()/2; st++)
delete fSegmentsPtr[st]; // Correct destruction of everything ????
return;
}
- //__________________________________________________________________________
-void AliMUONEventReconstructor::ResetTriggerTracks(void)
-{
- // To reset the TClonesArray of reconstructed trigger tracks
- if (fRecTriggerTracksPtr) fRecTriggerTracksPtr->Delete();
- // Delete in order that the Track destructors are called,
- // hence the space for the TClonesArray of pointers to TrackHit's is freed
- fNRecTriggerTracks = 0;
- return;
-}
//__________________________________________________________________________
void AliMUONEventReconstructor::ResetTrackHits(void)
AliMUONTrack *track;
TClonesArray *recTriggerTracks;
- fMUONData->ResetRecTriggerTracks();
fMUONData->SetTreeAddress("RL");
fMUONData->GetRecTriggerTracks();
recTriggerTracks = fMUONData->RecTriggerTracks();
{
// To make the trigger tracks from Local Trigger
AliDebug(1, "Enter MakeTriggerTracks");
- // ResetTriggerTracks();
Int_t nTRentries;
Long_t gloTrigPat;
Float_t thetay = TMath::ATan2( (y21-y11) , (z21-z11) );
recTriggerTrack = new AliMUONTriggerTrack(x11,y11,thetax,thetay,gloTrigPat);
+
// since static statement does not work, set gloTrigPat for each track
fMUONData->AddRecTriggerTrack(*recTriggerTrack);
+ delete recTriggerTrack;
} // end of loop on Local Trigger
return kTRUE;
}
}
}
-//__________________________________________________________________________
-void AliMUONEventReconstructor::FillEvent()
-{
-// Create a new AliMUONRecoEvent, fill its track list, then add it as a
-// leaf in the Event branch of TreeRecoEvent tree
- cout << "Enter FillEvent() ...\n";
-
- if (!fRecoEvent) {
- fRecoEvent = new AliMUONRecoEvent();
- } else {
- fRecoEvent->Clear();
- }
- //save current directory
- TDirectory *current = gDirectory;
- if (!fTreeFile) fTreeFile = new TFile("tree_reco.root", "RECREATE");
- if (!fEventTree) fEventTree = new TTree("TreeRecoEvent", "MUON reconstructed events");
- //AZif (fRecoEvent->MakeDumpTracks(fRecTracksPtr)) {
- if (fRecoEvent->MakeDumpTracks(fMuons, fRecTracksPtr, this)) { //AZ
- if (AliLog::GetGlobalDebugLevel() > 1) fRecoEvent->EventInfo();
- TBranch *branch = fEventTree->GetBranch("Event");
- if (!branch) branch = fEventTree->Branch("Event", "AliMUONRecoEvent", &fRecoEvent, 64000);
- branch->SetAutoDelete();
- fTreeFile->cd();
- fEventTree->Fill();
- fTreeFile->Write();
- }
- // restore directory
- current->cd();
-}
-
//__________________________________________________________________________
void AliMUONEventReconstructor::MakeTrackCandidatesK(void)
{
class TClonesArray;
class TFile;
class TTree;
-class AliMUONRecoEvent;
class AliMUONData;
class AliRunLoader;
class AliLoader;
void SetNRecTracks(Int_t NRecTracks) {fNRecTracks = NRecTracks;}
TClonesArray* GetRecTracksPtr(void) const {return fRecTracksPtr;} // Array
- // Reconstructed trigger tracks
- Int_t GetNRecTriggerTracks() const {return fNRecTriggerTracks;} // Number
- void SetNRecTriggerTracks(Int_t NRecTriggerTracks) {fNRecTriggerTracks = NRecTriggerTracks;}
- TClonesArray* GetRecTriggerTracksPtr(void) const {return fRecTriggerTracksPtr;} // Array
-
// Hits on reconstructed tracks
Int_t GetNRecTrackHits() const {return fNRecTrackHits;} // Number
void SetNRecTrackHits(Int_t NRecTrackHits) {fNRecTrackHits = NRecTrackHits;}
TClonesArray *fRecTracksPtr; // pointer to array of reconstructed tracks
Int_t fNRecTracks; // number of reconstructed tracks
- // Reconstructed trigger tracks
- TClonesArray *fRecTriggerTracksPtr; // pointer to array of reconstructed trigger tracks
- Int_t fNRecTriggerTracks; // number of reconstructed trigger tracks
-
// Track hits on reconstructed tracks
TClonesArray *fRecTrackHitsPtr; // pointer to array of hits on reconstructed tracks
Int_t fNRecTrackHits; // number of hits on reconstructed tracks
- // Objects needed for tree writing
- AliMUONRecoEvent *fRecoEvent; // the reconstructed event
- TTree *fEventTree; // tree of reconstructed events
- TFile *fTreeFile; // file where the tree is outputed
-
// data container
AliMUONData* fMUONData; // Data container for MUON subsystem
Bool_t MakeTriggerTracks(void);
void ResetTrackHits(void);
void ResetTracks(void);
- void ResetTriggerTracks(void);
Int_t MakeTrackCandidatesWithTwoSegments(AliMUONSegment *BegSegment);
Int_t MakeTrackCandidatesWithOneSegmentAndOnePoint(AliMUONSegment *BegSegment);
void MakeTrackCandidates(void);
#include <TObjArray.h>
#include <TVirtualFitter.h>
+#include "AliLog.h"
+
#include "AliMUONEventReconstructor.h"
#include "AliMUONHitForRec.h"
#include "AliMUONSegment.h"
{
// Destructor
if (fTrackHitsPtr) {
- fTrackHitsPtr->Clear();
- delete fTrackHitsPtr; // delete the TObjArray of pointers to TrackHit's
+ // delete the TObjArray of pointers to TrackHit's
+ delete fTrackHitsPtr;
fTrackHitsPtr = NULL;
}
if (fTrackParamAtHit) {
// delete the TClonesArray of pointers to TrackParam
- fTrackParamAtHit->Clear();
delete fTrackParamAtHit;
fTrackParamAtHit = NULL;
}
if (fHitForRecAtHit) {
// delete the TClonesArray of pointers to HitForRec
- fHitForRecAtHit->Clear();
delete fHitForRecAtHit;
fHitForRecAtHit = NULL;
}
AliMUONTrackHit *trackHit = new AliMUONTrackHit(*(AliMUONTrackHit*)(theMUONTrack.fTrackHitsPtr)->At(index));
fTrackHitsPtr->Add(trackHit);
}
+ fTrackHitsPtr->SetOwner(); // nedeed for deleting TClonesArray
// necessary to make a copy of the objects and not only the pointers in TClonesArray.
fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10);
// base class assignement
TObject::operator=(theMUONTrack);
- // fEventReconstructor = new AliMUONEventReconstructor(*MUONTrack.fEventReconstructor); // is it right ?
- // is it right ? NO because it would use dummy copy constructor
+ // fEventReconstructor = new AliMUONEventReconstructor(*MUONTrack.fEventReconstructor);
+ // is it right ?
+ // is it right ? NO because it would use dummy copy constructor
fEventReconstructor = theMUONTrack.fEventReconstructor;
fTrackParamAtVertex = theMUONTrack.fTrackParamAtVertex;
AliMUONTrackHit *trackHit = new AliMUONTrackHit(*(AliMUONTrackHit*)(theMUONTrack.fTrackHitsPtr)->At(index));
fTrackHitsPtr->Add(trackHit);
}
+ fTrackHitsPtr->SetOwner(); // nedeed for deleting TClonesArray
// necessary to make a copy of the objects and not only the pointers in TClonesArray.
fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10);
new ((*recTrackHitsPtr)[eventTrackHits]) AliMUONTrackHit(HitForRec);
this->fEventReconstructor->SetNRecTrackHits(eventTrackHits + 1);
// track
+ if (fTrackHitsPtr->IsOwner()) AliFatal("fTrackHitsPtr is owner");
fTrackHitsPtr->Add(trackHit);
fNTrackHits++;
}