#include <TObjArray.h>
#include <TVirtualFitter.h>
+#include "AliLog.h"
+
#include "AliMUONEventReconstructor.h"
#include "AliMUONHitForRec.h"
#include "AliMUONSegment.h"
fEventReconstructor = 0;
fTrackHitsPtr = new TObjArray(10);
fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10);
+ fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10);
+ fTrackID = 0;
}
//__________________________________________________________________________
fTrackHitsPtr->Sort(); // sort TrackHits according to increasing Z
SetTrackParamAtVertex(); // set track parameters at vertex
fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10);
+ fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10);
// set fit conditions...
fFitMCS = 0;
fFitNParam = 3;
fFitFMin = -1.0;
fMatchTrigger = kFALSE;
fChi2MatchTrigger = 0;
+ fTrackID = 0;
return;
}
fTrackHitsPtr->Sort(); // sort TrackHits according to increasing Z
SetTrackParamAtVertex(); // set track parameters at vertex
fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10);
+ fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10);
// set fit conditions...
fFitMCS = 0;
fFitNParam = 3;
fFitFMin = -1.0;
fMatchTrigger = kFALSE;
fChi2MatchTrigger = 0;
+ fTrackID = 0;
return;
}
{
// Destructor
if (fTrackHitsPtr) {
- delete fTrackHitsPtr; // delete the TObjArray of pointers to TrackHit's
+ // delete the TObjArray of pointers to TrackHit's
+ delete fTrackHitsPtr;
fTrackHitsPtr = NULL;
}
delete fTrackParamAtHit;
fTrackParamAtHit = NULL;
}
+
+ if (fHitForRecAtHit) {
+ // delete the TClonesArray of pointers to HitForRec
+ 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);
AliMUONTrackParam(*(AliMUONTrackParam*)(theMUONTrack.fTrackParamAtHit)->At(index));}
}
+ // necessary to make a copy of the objects and not only the pointers in TClonesArray.
+ fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10);
+ for (Int_t index = 0; index < (theMUONTrack.fHitForRecAtHit)->GetEntriesFast(); index++) {
+ {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()])
+ AliMUONHitForRec(*(AliMUONHitForRec*)(theMUONTrack.fHitForRecAtHit)->At(index));}
+ }
+
fNTrackHits = theMUONTrack.fNTrackHits;
fFitMCS = theMUONTrack.fFitMCS;
fFitNParam = theMUONTrack.fFitNParam;
fFitStart = theMUONTrack.fFitStart;
fMatchTrigger = theMUONTrack.fMatchTrigger;
fChi2MatchTrigger = theMUONTrack.fChi2MatchTrigger;
+ fTrackID = theMUONTrack.fTrackID;
}
//__________________________________________________________________________
// 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);
AliMUONTrackParam(*(AliMUONTrackParam*)(theMUONTrack.fTrackParamAtHit)->At(index));}
}
+ // necessary to make a copy of the objects and not only the pointers in TClonesArray.
+ fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10);
+ for (Int_t index = 0; index < (theMUONTrack.fHitForRecAtHit)->GetEntriesFast(); index++) {
+ {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()])
+ AliMUONHitForRec(*(AliMUONHitForRec*)(theMUONTrack.fHitForRecAtHit)->At(index));}
+ }
+
fNTrackHits = theMUONTrack.fNTrackHits;
fFitMCS = theMUONTrack.fFitMCS;
fFitNParam = theMUONTrack.fFitNParam;
fFitStart = theMUONTrack.fFitStart;
fMatchTrigger = theMUONTrack.fMatchTrigger;
fChi2MatchTrigger = theMUONTrack.fChi2MatchTrigger;
+ fTrackID = theMUONTrack.fTrackID;
return *this;
}
}
return;
}
+
+ //__________________________________________________________________________
+Bool_t* AliMUONTrack::CompatibleTrack(AliMUONTrack * Track, Double_t Sigma2Cut) const
+{
+ // Return kTRUE/kFALSE for each chamber if hit is compatible or not
+ TClonesArray *hitArray, *thisHitArray;
+ AliMUONHitForRec *hit, *thisHit;
+ Int_t chamberNumber;
+ Float_t deltaZ;
+ Float_t deltaZMax = 1.; // 1 cm
+ Float_t chi2 = 0;
+ Bool_t *nCompHit = new Bool_t[AliMUONConstants::NTrackingCh()];
+
+ for ( Int_t ch = 0; ch < AliMUONConstants::NTrackingCh(); ch++) {
+ nCompHit[ch] = kFALSE;
+ }
+
+ thisHitArray = this->GetHitForRecAtHit();
+
+ hitArray = Track->GetHitForRecAtHit();
+
+ for (Int_t iHthis = 0; iHthis < thisHitArray->GetEntriesFast(); iHthis++) {
+ thisHit = (AliMUONHitForRec*) thisHitArray->At(iHthis);
+ chamberNumber = thisHit->GetChamberNumber();
+ if (chamberNumber < 0 || chamberNumber > AliMUONConstants::NTrackingCh()) continue;
+ nCompHit[chamberNumber] = kFALSE;
+ for (Int_t iH = 0; iH < hitArray->GetEntriesFast(); iH++) {
+ hit = (AliMUONHitForRec*) hitArray->At(iH);
+ deltaZ = TMath::Abs(thisHit->GetZ() - hit->GetZ());
+ chi2 = thisHit->NormalizedChi2WithHitForRec(hit,Sigma2Cut); // set cut to 4 sigmas
+ if (chi2 < 3. && deltaZ < deltaZMax) {
+ nCompHit[chamberNumber] = kTRUE;
+ break;
+ }
+ }
+ }
+
+ return nCompHit;
+}
//__________________________________________________________________________
Int_t AliMUONTrack::HitsInCommon(AliMUONTrack* Track) const
new ((*recTrackHitsPtr)[eventTrackHits]) AliMUONTrackHit(HitForRec);
this->fEventReconstructor->SetNRecTrackHits(eventTrackHits + 1);
// track
+ if (fTrackHitsPtr->IsOwner()) AliFatal("fTrackHitsPtr is owner");
fTrackHitsPtr->Add(trackHit);
fNTrackHits++;
}
a[j + k*l] = a[k + j*l];
}
}
- delete localVERTs;
- delete localVERTq;
- delete localVERTpp;
+ delete [] localVERTs;
+ delete [] localVERTq;
+ delete [] localVERTpp;
return;
//*-*- failure return
L100:
- delete localVERTs;
- delete localVERTq;
- delete localVERTpp;
+ delete [] localVERTs;
+ delete [] localVERTq;
+ delete [] localVERTpp;
ifail = 1;
} /* mnvertLocal */