//
///////////////////////////////////////////////////
-#include <stdlib.h> // for exit()
+#include "AliMUONTrack.h"
+
+#include "AliMUONTrackReconstructor.h"
+#include "AliMUONHitForRec.h"
+#include "AliMUONSegment.h"
+#include "AliMUONTrackHit.h"
+#include "AliMUONTriggerTrack.h"
+#include "AliMUONConstants.h"
+
+#include "AliLog.h"
#include <Riostream.h> // for cout
#include <TMath.h>
#include <TObjArray.h>
#include <TVirtualFitter.h>
-#include "AliMUONEventReconstructor.h"
-#include "AliMUONHitForRec.h"
-#include "AliMUONSegment.h"
-#include "AliMUONTrack.h"
-#include "AliMUONTrackHit.h"
-#include "AliMUONTriggerTrack.h"
-#include "AliMUONConstants.h"
+#include <stdlib.h> // for exit()
// Functions to be minimized with Minuit
void TrackChi2(Int_t &NParam, Double_t *Gradient, Double_t &Chi2, Double_t *Param, Int_t Flag);
Double_t MultipleScatteringAngle2(AliMUONTrackHit *TrackHit);
-ClassImp(AliMUONTrack) // Class implementation in ROOT context
-
TVirtualFitter* AliMUONTrack::fgFitter = NULL;
- //__________________________________________________________________________
+ClassImp(AliMUONTrack) // Class implementation in ROOT context
+
+//__________________________________________________________________________
AliMUONTrack::AliMUONTrack()
: TObject()
{
// Default constructor
fgFitter = 0;
- fEventReconstructor = 0;
+ fTrackReconstructor = 0;
fTrackHitsPtr = new TObjArray(10);
fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10);
fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10);
}
//__________________________________________________________________________
-AliMUONTrack::AliMUONTrack(AliMUONSegment* BegSegment, AliMUONSegment* EndSegment, AliMUONEventReconstructor* EventReconstructor)
+AliMUONTrack::AliMUONTrack(AliMUONSegment* BegSegment, AliMUONSegment* EndSegment, AliMUONTrackReconstructor* TrackReconstructor)
: TObject()
{
// Constructor from two Segment's
- fEventReconstructor = EventReconstructor; // link back to EventReconstructor
+ fTrackReconstructor = TrackReconstructor; // link back to TrackReconstructor
// memory allocation for the TObjArray of pointers to reconstructed TrackHit's
fTrackHitsPtr = new TObjArray(10);
fNTrackHits = 0;
- AddSegment(BegSegment); // add hits from BegSegment
- AddSegment(EndSegment); // add hits from EndSegment
- fTrackHitsPtr->Sort(); // sort TrackHits according to increasing Z
- SetTrackParamAtVertex(); // set track parameters at vertex
+ if (BegSegment) { //AZ
+ AddSegment(BegSegment); // add hits from BegSegment
+ AddSegment(EndSegment); // add hits from EndSegment
+ 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...
}
//__________________________________________________________________________
-AliMUONTrack::AliMUONTrack(AliMUONSegment* Segment, AliMUONHitForRec* HitForRec, AliMUONEventReconstructor* EventReconstructor)
+AliMUONTrack::AliMUONTrack(AliMUONSegment* Segment, AliMUONHitForRec* HitForRec, AliMUONTrackReconstructor* TrackReconstructor)
: TObject()
{
// Constructor from one Segment and one HitForRec
- fEventReconstructor = EventReconstructor; // link back to EventReconstructor
+ fTrackReconstructor = TrackReconstructor; // link back to TrackReconstructor
// memory allocation for the TObjArray of pointers to reconstructed TrackHit's
fTrackHitsPtr = new TObjArray(10);
fNTrackHits = 0;
{
// 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;
}
AliMUONTrack::AliMUONTrack (const AliMUONTrack& theMUONTrack)
: TObject(theMUONTrack)
{
- //fEventReconstructor = new AliMUONEventReconstructor(*MUONTrack.fEventReconstructor);
+ //fTrackReconstructor = new AliMUONTrackReconstructor(*MUONTrack.fTrackReconstructor);
// is it right ?
// NO, because it would use dummy copy constructor
- // and AliMUONTrack is not the owner of its EventReconstructor
- fEventReconstructor = theMUONTrack.fEventReconstructor;
+ // and AliMUONTrack is not the owner of its TrackReconstructor
+ fTrackReconstructor = theMUONTrack.fTrackReconstructor;
fTrackParamAtVertex = theMUONTrack.fTrackParamAtVertex;
// necessary to make a copy of the objects and not only the pointers in TObjArray.
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 = theMUONTrack.fEventReconstructor;
+ // fTrackReconstructor = new AliMUONTrackReconstructor(*MUONTrack.fTrackReconstructor);
+ // is it right ?
+ // is it right ? NO because it would use dummy copy constructor
+ fTrackReconstructor = theMUONTrack.fTrackReconstructor;
fTrackParamAtVertex = theMUONTrack.fTrackParamAtVertex;
// necessary to make a copy of the objects and not only the pointers in TObjArray.
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);
// and corresponding track hits from array of track hits.
// Compress the TClonesArray it belongs to.
AliMUONTrackHit *nextTrackHit;
- AliMUONEventReconstructor *eventRec = this->fEventReconstructor;
+ AliMUONTrackReconstructor *eventRec = this->fTrackReconstructor;
TClonesArray *trackHitsPtr = eventRec->GetRecTrackHitsPtr();
// Loop over all track hits of track
AliMUONTrackHit *trackHit = (AliMUONTrackHit*) fTrackHitsPtr->First();
trackParam = *((AliMUONTrackParam*) fTrackParamAtHit->Last());
trackParam.ExtrapToZ(AliMUONConstants::DefaultChamberZ(10)); // extrap to 1st trigger chamber
- nSigmaCut2 = fEventReconstructor->GetMaxSigma2Distance(); // nb of sigma**2 for cut
+ nSigmaCut2 = fTrackReconstructor->GetMaxSigma2Distance(); // nb of sigma**2 for cut
xTrack = trackParam.GetNonBendingCoor();
yTrack = trackParam.GetBendingCoor();
ySlopeTrack = trackParam.GetBendingSlope();
// Add HitForRec to the track:
// actual TrackHit into TClonesArray of TrackHit's for the event;
// pointer to actual TrackHit in TObjArray of pointers to TrackHit's for the track
- TClonesArray *recTrackHitsPtr = this->fEventReconstructor->GetRecTrackHitsPtr();
- Int_t eventTrackHits = this->fEventReconstructor->GetNRecTrackHits();
+ TClonesArray *recTrackHitsPtr = this->fTrackReconstructor->GetRecTrackHitsPtr();
+ Int_t eventTrackHits = this->fTrackReconstructor->GetNRecTrackHits();
// event
AliMUONTrackHit* trackHit =
new ((*recTrackHitsPtr)[eventTrackHits]) AliMUONTrackHit(HitForRec);
- this->fEventReconstructor->SetNRecTrackHits(eventTrackHits + 1);
+ this->fTrackReconstructor->SetNRecTrackHits(eventTrackHits + 1);
// track
+ if (fTrackHitsPtr->IsOwner()) AliFatal("fTrackHitsPtr is owner");
fTrackHitsPtr->Add(trackHit);
fNTrackHits++;
}
firstHit->GetBendingCoor() - bendingSlope * firstHit->GetZ(); // same if from firstHit and lastHit ????
// signed bending momentum
Double_t signedBendingMomentum =
- fEventReconstructor->GetBendingMomentumFromImpactParam(impactParam);
+ fTrackReconstructor->GetBendingMomentumFromImpactParam(impactParam);
trackParam->SetInverseBendingMomentum(1.0 / signedBendingMomentum);
// bending slope at vertex
trackParam->
SetBendingSlope(bendingSlope +
- impactParam / fEventReconstructor->GetSimpleBPosition());
+ impactParam / fTrackReconstructor->GetSimpleBPosition());
// non bending slope
Double_t nonBendingSlope =
(firstHit->GetNonBendingCoor() - lastHit->GetNonBendingCoor()) / deltaZ;
// thickness in radiation length for the current track,
// taking local angle into account
radiationLength =
- trackBeingFitted->GetEventReconstructor()->GetChamberThicknessInX0() *
+ trackBeingFitted->GetTrackReconstructor()->GetChamberThicknessInX0() *
TMath::Sqrt(1.0 +
slopeBending * slopeBending + slopeNonBending * slopeNonBending);
inverseBendingMomentum2 =