]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONHit.cxx
In PointSetArray: added member for default daughter PointSet capacity (fDefPointSetCa...
[u/mrichter/AliRoot.git] / MUON / AliMUONHit.cxx
index d59ea595806abbc87350fc0424d3f58802bc9268..e1050cd1332031df8769380d131d71e8a1b01922 100644 (file)
 
 /* $Id$ */
 
+// 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.
+//
+#include "Riostream.h"
+
+#include <TMath.h>
+#include <TString.h>
+
+#include "AliLog.h"
 #include "AliMUONHit.h"
+#include "AliMUONGeometryStore.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(), 
+    fIsDetElemId(kTRUE),
+    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),
+    fIsDetElemId(kFALSE),
+    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
+/// \deprecated TBR
+
+    fX         = hits[1];
+    fY         = hits[2];
+    fZ         = hits[3];
+}
+
+//___________________________________________
+AliMUONHit::AliMUONHit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits, 
+                       Bool_t /*isDetElemId*/)
+  : AliHit(shunt, track),
+    fIsDetElemId(kTRUE),
+    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 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),
+    fIsDetElemId(kFALSE),
+    fDetElemId(iChamber),
+    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;
+/// Constructor
+/// \deprecated TBR
+
     fX         = X;
     fY         = Y;
     fZ         = Z;
-    fTheta     = theta;
-    fPhi       = phi;
-    fTlength   = length;
-    fEloss     = destep;
-    fPHfirst   = 0;
-    fPHlast    = 0;
-    fPTot      = momentum;
-    fAge       = tof;
 }
 
+//___________________________________________
+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,
+                      Bool_t /*isDetElemId*/)
+  : AliHit(shunt, track),
+    fIsDetElemId(kTRUE),
+    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
+    fX         = X;
+    fY         = Y;
+    fZ         = Z;
+}
 
+//-----------------------------------------------------------------------------------------------
+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,
+                      Float_t Xref,Float_t Yref,Float_t Zref)
+  : AliHit(shunt, track),
+    fIsDetElemId(kFALSE),
+    fDetElemId(iChamber),
+    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
+/// \deprecated TBR
 
+    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,
+                      Bool_t /*isDetElemId*/)
+  : AliHit(shunt, track),
+    fIsDetElemId(kTRUE),
+    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::DetElemId()const
+{
+/// Return detection element ID
+
+  if (!fIsDetElemId) {
+    AliWarning("Detection element Id is not defined.");
+    return 0;
+  }  
+  
+  return fDetElemId;
+}
 
+//-----------------------------------------------------------------------------------------------
+Int_t  AliMUONHit::Chamber()  const
+{  
+/// Return chamber ID
 
+  if (!fIsDetElemId) 
+    return fDetElemId;
+  else  
+    return AliMUONGeometryStore::GetModuleId(fDetElemId)+1;  
+}
 
+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;
+  }
+    
+}