* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.3 2001/03/17 10:07:20 morsch
-Correct inconsistent variable name / method name / comments.
+/* $Id$ */
-Revision 1.2 2000/06/15 07:58:48 morsch
-Code from MUON-dev joined
+//-----------------------------------------------------------------------------
+// MUON class for MonteCarlo Hits, inherited from AliHit for the
+// In addition to the ALiHit data member fX, fY, fZ and fTrack, AliMUONHit contains some info about the particle crossing the chamber:
+// Impulsion: fPtot, fPx, fPy and fPz
+// Reference position at the center of the chamber (wire plane) fXref, fYref and fZref
+// Cumulated path along the active volume fTlength for spliting of hits for very inclined tracks
+// Energy loss of the particle inside the gas active volume.
+// Incident fTheta and fPhi angle with respect of the wire plane of the chamber.
+//-----------------------------------------------------------------------------
-Revision 1.1.2.1 2000/06/09 22:02:14 morsch
-Was before in DataStructures.cxx
-
-*/
#include "AliMUONHit.h"
+#include "AliMpDEManager.h"
+
+#include "AliLog.h"
+
+#include <Riostream.h>
+#include <TMath.h>
+#include <TString.h>
+/// \cond CLASSIMP
ClassImp(AliMUONHit)
+/// \endcond
//___________________________________________
-AliMUONHit::AliMUONHit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
- AliHit(shunt, track)
+AliMUONHit::AliMUONHit()
+ : AliHit(),
+ fDetElemId(0),
+ fParticle(0),
+ fTheta(0),
+ fPhi(0),
+ fTlength(0),
+ fEloss(0),
+ fAge(0),
+ fPHfirst(0),
+ fPHlast(0),
+ fPTot(0),
+ fPx(0),
+ fPy(0),
+ fPz(0),
+ fXref(0),
+ fYref(0),
+ fZref(0)
+{
+/// Default constructor
+}
+
+//___________________________________________
+AliMUONHit::AliMUONHit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits)
+ : AliHit(shunt, track),
+ fDetElemId(vol[0]),
+ fParticle(hits[0]),
+ fTheta(hits[4]),
+ fPhi(hits[5]),
+ fTlength(hits[6]),
+ fEloss(hits[7]),
+ fAge(hits[14]),
+ fPHfirst((Int_t)hits[8]),
+ fPHlast((Int_t)hits[9]),
+ fPTot(hits[10]),
+ fPx(hits[11]),
+ fPy(hits[12]),
+ fPz(hits[13]),
+ fXref(0),
+ fYref(0),
+ fZref(0)
{
-// Constructor
- fChamber = vol[0];
- fParticle = hits[0];
+/// Constructor
+
fX = hits[1];
fY = hits[2];
fZ = hits[3];
- fTheta = hits[4];
- fPhi = hits[5];
- fTlength = hits[6];
- fEloss = hits[7];
- fPHfirst = (Int_t) hits[8];
- fPHlast = (Int_t) hits[9];
- fPTot = hits[10];
- fPx = hits[11];
- fPy = hits[12];
- fPz = hits[13];
- fAge = hits[14];
}
+
//___________________________________________
-AliMUONHit::AliMUONHit(Int_t shunt, Int_t track, Int_t iChamber, Int_t idpart, Float_t X, Float_t Y, Float_t Z, Float_t tof, Float_t momentum, Float_t theta, Float_t phi, Float_t length, Float_t destep):
- AliHit(shunt, track)
+AliMUONHit::AliMUONHit(Int_t shunt, Int_t track, Int_t detElemId, Int_t idpart,
+ Float_t x, Float_t y, Float_t z, Float_t tof, Float_t momentum,
+ Float_t theta, Float_t phi, Float_t length, Float_t destep)
+ : AliHit(shunt, track),
+ fDetElemId(detElemId),
+ fParticle(idpart),
+ fTheta(theta),
+ fPhi(phi),
+ fTlength(length),
+ fEloss(destep),
+ fAge(tof),
+ fPHfirst(0),
+ fPHlast(0),
+ fPTot(momentum),
+ fPx(momentum * TMath::Sin(theta) * TMath::Cos(phi)),
+ fPy(momentum * TMath::Sin(theta) * TMath::Sin(phi)),
+ fPz(momentum * TMath::Cos(theta)),
+ fXref(0),
+ fYref(0),
+ fZref(0)
{
-// Constructor
- fChamber = iChamber;
- fParticle = idpart;
- fX = X;
- fY = Y;
- fZ = Z;
- fTheta = theta;
- fPhi = phi;
- fTlength = length;
- fEloss = destep;
- fPHfirst = 0;
- fPHlast = 0;
- fPTot = momentum;
- fAge = tof;
+/// Constructor
+ fX = x;
+ fY = y;
+ fZ = z;
}
+//-----------------------------------------------------------------------------------------------
+AliMUONHit::AliMUONHit(Int_t shunt, Int_t track, Int_t detElemId, Int_t idpart,
+ Float_t x, Float_t y, Float_t z, Float_t tof, Float_t momentum,
+ Float_t theta, Float_t phi, Float_t length, Float_t destep,
+ Float_t xref,Float_t yref,Float_t zref)
+ : AliHit(shunt, track),
+ fDetElemId(detElemId),
+ fParticle(idpart),
+ fTheta(theta),
+ fPhi(phi),
+ fTlength(length),
+ fEloss(destep),
+ fAge(tof),
+ fPHfirst(0),
+ fPHlast(0),
+ fPTot(momentum),
+ fPx(momentum * TMath::Sin(theta) * TMath::Cos(phi)),
+ fPy(momentum * TMath::Sin(theta) * TMath::Sin(phi)),
+ fPz(momentum * TMath::Cos(theta)),
+ fXref(xref),
+ fYref(yref),
+ fZref(zref)
+{
+/// Constructor
+ fX = x;
+ fY = y;
+ fZ = z;
+}
+//-----------------------------------------------------------------------------------------------
+AliMUONHit::~AliMUONHit()
+{
+/// Dectructor
+}
+//-----------------------------------------------------------------------------------------------
+Int_t AliMUONHit::Chamber() const
+{
+/// Return chamber ID
+ return AliMpDEManager::GetChamberId(fDetElemId) + 1;
+}
+//-----------------------------------------------------------------------------
+const char*
+AliMUONHit::GetName() const
+{
+/// Generate hit name
+ return Form("%s-DE%04d",ClassName(),DetElemId());
+}
+//-----------------------------------------------------------------------------------------------
+void AliMUONHit::Print(Option_t* opt) const
+{
+/// Printing hit information
+/// "full" option for printing all the information about the hit
+
+ TString sopt(opt);
+ sopt.ToUpper();
+
+ if ( sopt.Contains("FULL") ) {
+ cout <<"<AliMUONHit>: Geant track=" << setw(4) << Track() <<
+ ", DetEle=" << setw(4) << DetElemId() <<
+ ", (x,y,z)=(" << setw(7) << setprecision(5) << X() << "," << setw(7) << setprecision(5) << Y() << "," << setw(7) << setprecision(5) << Z() <<
+ " )cm, Delta E=" << setw(8) << setprecision(3) << Eloss() << " GeV" << endl;
+ }
+ else {
+ cout << "<AliMUONHit>: DetEle=" << setw(4) << DetElemId() <<
+ ", (x,y,z)=(" << setw(7) << setprecision(5) << X() << "," << setw(7) << setprecision(5) << Y() << "," << setw(7) << setprecision(5) << Z() <<
+ " ) cm" <<endl;
+ }
+
+}