//
///////////////////////////////////////////////////////////
+#include "AliMUONSegment.h"
#include "AliMUON.h"
-#include "AliMUONChamber.h"
#include "AliMUONHitForRec.h"
-#include "AliMUONSegment.h"
#include "AliMUONTrackParam.h"
#include "AliRun.h" // for gAlice
+#include "AliLog.h"
ClassImp(AliMUONSegment) // Class implementation in ROOT context
//__________________________________________________________________________
AliMUONSegment::AliMUONSegment()
+ : TObject(),
+ fHitForRecPtr1(0x0),
+ fHitForRecPtr2(0x0),
+ fBendingCoor(0.),
+ fBendingSlope(0.),
+ fBendingCoorReso2(0.),
+ fBendingSlopeReso2(0.),
+ fBendingCoorSlopeReso2(0.),
+ fBendingImpact(0.),
+ fNonBendingCoor(0.),
+ fNonBendingSlope(0.),
+ fNonBendingCoorReso2(0.),
+ fNonBendingSlopeReso2(0.),
+ fNonBendingCoorSlopeReso2(0.),
+ fNonBendingImpact(0.),
+ fZ(0.),
+ fInTrack(kFALSE)
{
// Default constructor
- fHitForRecPtr1 = 0; // pointer to HitForRec in first chamber
- fHitForRecPtr2 = 0; // pointer to HitForRec in second chamber
- // Bending plane:
- fBendingCoor = 0.0; // Coordinate in bending plane
- fBendingSlope = 0.0; // Slope in bending plane
- // Covariance in bending plane:
- fBendingCoorReso2 = 0.0; // Covariance(coordinate C1 in first chamber)
- fBendingSlopeReso2 = 0.0; // Covariance(slope)
- fBendingCoorSlopeReso2 = 0.0; // Covariance(C1,slope)
- fBendingImpact = 0.0; // Impact parameter in bending plane
- // Non Bending plane:
- fNonBendingCoor = 0.0; // Coordinate in non bending plane
- fNonBendingSlope = 0.0; // Slope in non bending plane
- // Covariance in non bending plane:
- fNonBendingCoorReso2 = 0.0; // Covariance(coordinate C1 in first chamber)
- fNonBendingSlopeReso2 = 0.0; // Covariance(slope)
- fNonBendingCoorSlopeReso2 = 0.0; // Covariance(C1,slope)
- fNonBendingImpact = 0.0; // Impact parameter in non bending plane
- fInTrack = kFALSE; // TRUE if segment belongs to one track
+
}
//__________________________________________________________________________
AliMUONSegment::AliMUONSegment(AliMUONHitForRec* Hit1, AliMUONHitForRec* Hit2)
+ : TObject(),
+ fHitForRecPtr1(Hit1),
+ fHitForRecPtr2(Hit2),
+ fBendingCoor(Hit1->GetBendingCoor()),
+ fBendingSlope(0.),
+ fBendingCoorReso2(Hit1->GetBendingReso2()),
+ fBendingSlopeReso2(0.),
+ fBendingCoorSlopeReso2(0.),
+ fBendingImpact(0.),
+ fNonBendingCoor(Hit1->GetNonBendingCoor()),
+ fNonBendingSlope(0.),
+ fNonBendingCoorReso2(Hit1->GetNonBendingReso2()),
+ fNonBendingSlopeReso2(0.),
+ fNonBendingCoorSlopeReso2(0.),
+ fNonBendingImpact(0.),
+ fZ(Hit1->GetZ()),
+ fInTrack(kFALSE)
{
// Constructor for AliMUONSegment from two HitForRec's,
// one, in the first chamber of the station, pointed to by "Hit1",
// in bending and non bending planes.
// Puts the "fInTrack" flag to "kFALSE".
Double_t dz;
- // pointers to HitForRec's
- fHitForRecPtr1 = Hit1;
- fHitForRecPtr2 = Hit2;
dz = Hit1->GetZ() - Hit2->GetZ();
+
// bending plane
- fBendingCoor = Hit1->GetBendingCoor();
fBendingSlope = (fBendingCoor - Hit2->GetBendingCoor()) / dz;
fBendingImpact = fBendingCoor - Hit1->GetZ() * fBendingSlope;
- fBendingCoorReso2 = Hit1->GetBendingReso2();
fBendingSlopeReso2 = ( Hit1->GetBendingReso2() +
Hit2->GetBendingReso2() ) / dz / dz;
fBendingCoorSlopeReso2 = Hit1->GetBendingReso2() / dz;
// non bending plane
- fNonBendingCoor = Hit1->GetNonBendingCoor();
fNonBendingSlope = (fNonBendingCoor - Hit2->GetNonBendingCoor()) / dz;
fNonBendingImpact = fNonBendingCoor - Hit1->GetZ() * fNonBendingSlope;
- fNonBendingCoorReso2 = Hit1->GetNonBendingReso2();
fNonBendingSlopeReso2 = ( Hit1->GetNonBendingReso2() +
Hit2->GetNonBendingReso2() ) / dz / dz;
fNonBendingCoorSlopeReso2 = Hit1->GetNonBendingReso2() / dz;
- // "fInTrack" flag to "kFALSE"
- fInTrack = kFALSE;
return;
}
-AliMUONSegment::AliMUONSegment (const AliMUONSegment& MUONSegment)
-{
-// Dummy copy constructor
-}
-
-AliMUONSegment & AliMUONSegment::operator=(const AliMUONSegment& MUONSegment)
-{
-// Dummy assignment operator
- return *this;
-}
-
//__________________________________________________________________________
Int_t AliMUONSegment::Compare(const TObject* Segment) const
{
}
//__________________________________________________________________________
-Double_t AliMUONSegment::NormalizedChi2WithSegment(AliMUONSegment* Segment, Double_t Sigma2Cut)
+Double_t AliMUONSegment::NormalizedChi2WithSegment(AliMUONSegment* Segment, Double_t Sigma2Cut) const
{
// Calculate the normalized Chi2 between the current Segment (this)
// and the Segment pointed to by "Segment",
}
//__________________________________________________________________________
-AliMUONSegment* AliMUONSegment::CreateSegmentFromLinearExtrapToStation (Int_t Station, Double_t MCSfactor)
+AliMUONSegment* AliMUONSegment::CreateSegmentFromLinearExtrapToStation ( Double_t z, Double_t MCSfactor) const
{
// Extrapolates linearly the current Segment (this) to station (0..) "Station".
// Multiple Coulomb scattering calculated from "MCSfactor"
// The caller has the responsibility to delete this object.
AliMUONSegment* extrapSegment = new AliMUONSegment(); // creates empty new segment
// dZ from first hit of current Segment to first chamber of station "Station"
- AliMUON *pMUON = (AliMUON*) gAlice->GetModule("MUON"); // necessary ????
- Double_t dZ =
- (&(pMUON->Chamber(2 * Station)))->Z() - (this->fHitForRecPtr1)->GetZ();
+ Double_t dZ = z - this->GetZ();
// Data in bending plane
+ extrapSegment->fZ = z;
// coordinate
extrapSegment->fBendingCoor = this->fBendingCoor + this->fBendingSlope * dZ;
// slope
}
//__________________________________________________________________________
-AliMUONHitForRec* AliMUONSegment::CreateHitForRecFromLinearExtrapToChamber (Int_t Chamber, Double_t MCSfactor)
+AliMUONHitForRec* AliMUONSegment::CreateHitForRecFromLinearExtrapToChamber ( Double_t z, Double_t MCSfactor) const
{
// Extrapolates linearly the current Segment (this) to chamber(0..) "Chamber".
// Multiple Coulomb scattering calculated from "MCSfactor"
// The caller has the responsibility to delete this object.
AliMUONHitForRec* extrapHitForRec = new AliMUONHitForRec(); // creates empty new HitForRec
// dZ from first hit of current Segment to chamber
- AliMUON *pMUON = (AliMUON*) gAlice->GetModule("MUON"); // necessary ????
- Double_t dZ =
- (&(pMUON->Chamber(Chamber)))->Z() - (this->fHitForRecPtr1)->GetZ();
+ Double_t dZ = z - this->GetZ();
// Data in bending plane
+ extrapHitForRec->SetZ(z);
// coordinate
extrapHitForRec->SetBendingCoor(this->fBendingCoor + this->fBendingSlope * dZ);
// covariance, including multiple Coulomb scattering over dZ due to one chamber
}
//__________________________________________________________________________
-void AliMUONSegment::UpdateFromStationTrackParam(AliMUONTrackParam *TrackParam, Double_t MCSfactor, Double_t Dz1, Double_t Dz2, Double_t Dz3, Int_t Station, Double_t InverseMomentum)
+void AliMUONSegment::UpdateFromStationTrackParam(AliMUONTrackParam *TrackParam, Double_t /*MCSfactor*/, Double_t /*Dz1*/, Double_t /*Dz2*/, Double_t /*Dz3*/, Int_t Station, Double_t InverseMomentum)
{
// Fill data members with values calculated from the array of track parameters
// pointed to by "TrackParam" (index = 0 and 1 for first and second chambers
fNonBendingCoor = param0->GetNonBendingCoor(); // coordinate
fNonBendingSlope = param0->GetNonBendingSlope(); // slope
+ fZ = param0->GetZ(); // z
+
// Resolutions
// cReso2 and sReso2 have to be subtracted here from the parametrization
// because they are added in the functions "NormalizedChi2WithSegment"