]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITShit.cxx
Typo corrected
[u/mrichter/AliRoot.git] / ITS / AliITShit.cxx
index 3f4929a01fbdfa026dde02a3877db62781c52e94..7554f001d99a5f58764b4554614cfbbabae91c73 100644 (file)
 
 /*
 $Log$
+Revision 1.20  2002/10/22 14:45:42  alibrary
+Introducing Riostream.h
+
+Revision 1.19  2002/10/14 14:57:00  hristov
+Merging the VirtualMC branch to the main development branch (HEAD)
+
+Revision 1.13.6.3  2002/08/28 15:06:50  alibrary
+Updating to v3-09-01
+
+Revision 1.18  2002/08/07 18:37:53  nilsen
+Removed endl from print function. should be supplied by user as wanted.
+
+Revision 1.17  2002/06/20 09:10:14  hristov
+Data member ft0 initialized
+
+Revision 1.16  2002/06/19 21:12:37  nilsen
+Fixed bug with non-zero-ed new data members in constructors. Thanks Jiri
+for finding it and pointing it out.
+
+Revision 1.15  2002/06/12 18:59:47  nilsen
+Added Starting track location to hit class and related changes to modules.
+This is at present still fully backwards compatible since starting hits
+are still written to the file. When aliroot v4.0 will be released, this
+backwards compatiblity will be broken by removing the enterence hit, and making
+the nessesary changes to module at that time.
+
+Revision 1.14  2002/05/19 18:17:03  hristov
+Changes needed by ICC/IFC compiler (Intel)
+
+Revision 1.13  2002/03/09 18:35:35  nilsen
+Added functions to print out Hit data members.
+
+Revision 1.12  2002/03/08 16:05:05  nilsen
+Standeard io streamers added to make debugging et al. easier.
+
+Revision 1.11  2001/01/30 09:23:13  hristov
+Streamers removed (R.Brun)
+
+Revision 1.10  2001/01/26 20:01:19  hristov
+Major upgrade of AliRoot code
+
+Revision 1.9  2000/10/02 16:32:51  barbera
+Automatic streamer used and forward declarations added
+
+Revision 1.3.4.7  2000/10/02 15:54:49  barbera
+Automatic streamer used and forward declarations added
+
+Revision 1.8  2000/09/22 12:35:21  nilsen
+Traps placed incase it is used without a properly initilized AliITSgeom class.
+
+Revision 1.7  2000/07/10 16:07:18  fca
+Release version of ITS code
+
 Revision 1.3.4.2  2000/03/04 23:43:57  nilsen
 Fixed up the comments/documentation.
 
@@ -27,6 +80,7 @@ Introduction of the Copyright and cvs Log
 
 */
 
+#include <Riostream.h>
 
 #include <TMath.h>
 #include <TRandom.h>
@@ -34,10 +88,11 @@ Introduction of the Copyright and cvs Log
 #include <TGeometry.h>
 #include <TNode.h>
 #include <TTUBE.h>
+#include "TParticle.h"
 
 #include "AliRun.h"
-#include "AliITSgeom.h"
 #include "AliITS.h"
+#include "AliITSgeom.h"
 #include "AliITShit.h"
 
 
@@ -204,6 +259,73 @@ ClassImp(AliITShit)
 //
 ////////////////////////////////////////////////////////////////////////
 //_____________________________________________________________________________
+AliITShit::AliITShit():AliHit(){
+    // Default Constructor
+    // Zero data member just to be safe.
+    // Intputs:
+    //    none.
+    // Outputs:
+    //    none.
+    // Return:
+    //    A default created AliITShit class.
+
+    fStatus = 0; // Track Status
+    fLayer  = 0;  // Layer number
+    fLadder = 0; // Ladder number
+    fDet    = 0;    // Detector number  
+    fPx     = 0.0;     // PX of particle at the point of the hit
+    fPy     = 0.0;     // PY of particle at the point of the hit
+    fPz     = 0.0;     // PZ of particle at the point of the hit
+    fDestep = 0.0; // Energy deposited in the current step
+    fTof    = 0.0;    // Time of flight at the point of the hit
+    fStatus0 = 0; // zero status bit by default.
+    fx0     = 0.0;     // Starting point of this step
+    fy0     = 0.0;     // Starting point of this step
+    fz0     = 0.0;     // Starting point of this step
+    ft0     = 0.0;     // Starting point of this step
+}
+AliITShit::AliITShit(Int_t shunt,Int_t track,Int_t *vol,Float_t edep,
+                    Float_t tof,TLorentzVector &x,TLorentzVector &x0,
+                    TLorentzVector &p) : AliHit(shunt, track){
+////////////////////////////////////////////////////////////////////////
+// Create ITS hit
+//     The creator of the AliITShit class. The variables shunt and
+// track are passed to the creator of the AliHit class. See the AliHit
+// class for a full description. In the units of the Monte Carlo
+////////////////////////////////////////////////////////////////////////
+    // Intputs:
+    //    Int_t shunt   See AliHit
+    //    Int_t track   Track number, see AliHit
+    //    Int_t *vol     Array of integer hit data,
+    //                     vol[0] Layer where the hit is, 1-6 typicaly
+    //                     vol[1] Ladder where the hit is.
+    //                     vol[2] Detector number where the hit is
+    //                     vol[3] Set of status bits
+    //                     vol[4] Set of status bits at start
+    // Outputs:
+    //    none.
+    // Return:
+    //    A default created AliITShit class.
+
+    fLayer      = vol[0];  // Layer number
+    fLadder     = vol[2];  // Ladder number
+    fDet        = vol[1];  // Detector number
+    fStatus     = vol[3];  // Track status flags
+    fStatus0    = vol[4];  // Track status flag for start position.
+    fX          = x.X();   // Track X global position
+    fY          = x.Y();   // Track Y global position
+    fZ          = x.Z();   // Track Z global position
+    fPx         = p.Px();  // Track X Momentum
+    fPy         = p.Py();  // Track Y Momentum
+    fPz         = p.Pz();  // Track Z Momentum
+    fDestep     = edep;    // Track dE/dx for this step
+    fTof        = tof   ;  // Track Time of Flight for this step
+    fx0         = x0.X();  // Track X global position
+    fy0         = x0.Y();  // Track Y global position
+    fz0         = x0.Z();  // Track Z global position
+    ft0         = x0.T();     // Starting point of this step
+}
+//______________________________________________________________________
 AliITShit::AliITShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
     AliHit(shunt, track){
 ////////////////////////////////////////////////////////////////////////
@@ -216,18 +338,44 @@ AliITShit::AliITShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
 // fZ = hits[2], fPx = hits[3], fPy = hits[4], fPz = hits[5],
 // fDestep = hits[6], and fTof = hits[7]. In the units of the Monte Carlo
 ////////////////////////////////////////////////////////////////////////
+    // Intputs:
+    //    Int_t shunt   See AliHit
+    //    Int_t track   Track number, see AliHit
+    //    Int_t *vol     Array of integer hit data,
+    //                     vol[0] Layer where the hit is, 1-6 typicaly
+    //                     vol[1] Ladder where the hit is.
+    //                     vol[2] Detector number where the hit is
+    //                     vol[3] Set of status bits
+    //    Float_t *hits   Array of hit information
+    //                     hits[0] X global position of this hit
+    //                     hits[1] Y global position of this hit
+    //                     hits[2] Z global position of this hit
+    //                     hits[3] Px global position of this hit
+    //                     hits[4] Py global position of this hit
+    //                     hits[5] Pz global position of this hit
+    //                     hits[6] Energy deposited by this step
+    //                     hits[7] Time of flight of this particle at this step
+    // Outputs:
+    //    none.
+    // Return:
+    //    A standard created AliITShit class.
   fLayer      = vol[0];   // Layer number
   fLadder     = vol[2];   // Ladder number
   fDet        = vol[1];   // Detector number
   fStatus     = vol[3];   // Track status flags
-  fX          = hits[0];  // Track X position
-  fY          = hits[1];  // Track Y position
-  fZ          = hits[2];  // Track Z position
+  fX          = hits[0];  // Track X global position
+  fY          = hits[1];  // Track Y global position
+  fZ          = hits[2];  // Track Z global position
   fPx         = hits[3];  // Track X Momentum
   fPy         = hits[4];  // Track Y Momentum
   fPz         = hits[5];  // Track Z Momentum
   fDestep     = hits[6];  // Track dE/dx for this step
   fTof        = hits[7];  // Track Time of Flight for this step
+  fStatus0 = 0;// Track Status of Starting point
+  fx0 = 0.0;     // Starting point of this step
+  fy0 = 0.0;     // Starting point of this step
+  fz0 = 0.0;     // Starting point of this step
+  ft0 = 0.0;     // Starting point of this step
 }
 //______________________________________________________________________
 void AliITShit::GetPositionL(Float_t &x,Float_t &y,Float_t &z){
@@ -241,10 +389,18 @@ void AliITShit::GetPositionL(Float_t &x,Float_t &y,Float_t &z){
     g[0] = fX;
     g[1] = fY;
     g[2] = fZ;
-    gm->GtoL(fLayer,fLadder,fDet,g,l);
-    x = l[0];
-    y = l[1];
-    z = l[2];
+    if(gm) {
+      gm->GtoL(fLayer,fLadder,fDet,g,l);
+      x = l[0];
+      y = l[1];
+      z = l[2];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      // AliITSv7 - SDD case
+      x=fX;
+      y=fZ;
+      z=fY;
+    }
     return;
 }
 //______________________________________________________________________
@@ -259,10 +415,18 @@ void AliITShit::GetPositionL(Float_t &x,Float_t &y,Float_t &z,Float_t &tof){
     g[0] = fX;
     g[1] = fY;
     g[2] = fZ;
-    gm->GtoL(fLayer,fLadder,fDet,g,l);
-    x = l[0];
-    y = l[1];
-    z = l[2];
+    if(gm) {
+      gm->GtoL(fLayer,fLadder,fDet,g,l);
+      x = l[0];
+      y = l[1];
+      z = l[2];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      // AliITSv7 - SDD case
+      x=fX;
+      y=fZ;
+      z=fY;
+    }
     tof = fTof;
     return;
 }
@@ -278,8 +442,13 @@ Float_t AliITShit::GetXL(){
     g[0] = fX;
     g[1] = fY;
     g[2] = fZ;
-    gm->GtoL(fLayer,fLadder,fDet,g,l);
-    return l[0];
+    if(gm) {
+      gm->GtoL(fLayer,fLadder,fDet,g,l);
+      return l[0];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      return fX;
+    }
 }
 //______________________________________________________________________
 Float_t AliITShit::GetYL(){
@@ -293,8 +462,13 @@ Float_t AliITShit::GetYL(){
     g[0] = fX;
     g[1] = fY;
     g[2] = fZ;
-    gm->GtoL(fLayer,fLadder,fDet,g,l);
-    return l[1];
+    if (gm) {
+      gm->GtoL(fLayer,fLadder,fDet,g,l);
+      return l[1];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      return fZ;
+    }
 }
 //______________________________________________________________________
 Float_t AliITShit::GetZL(){
@@ -308,8 +482,13 @@ Float_t AliITShit::GetZL(){
     g[0] = fX;
     g[1] = fY;
     g[2] = fZ;
-    gm->GtoL(fLayer,fLadder,fDet,g,l);
-    return l[2];
+    if(gm) {
+      gm->GtoL(fLayer,fLadder,fDet,g,l);
+      return l[2];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      return fY;
+    }
 }
 //______________________________________________________________________
 void AliITShit::GetMomentumL(Float_t &px,Float_t &py,Float_t &pz){
@@ -323,10 +502,17 @@ void AliITShit::GetMomentumL(Float_t &px,Float_t &py,Float_t &pz){
     g[0] = fPx;
     g[1] = fPy;
     g[2] = fPz;
-    gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
-    px = l[0];
-    py = l[1];
-    pz = l[2];
+    if (gm) {
+      gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
+      px = l[0];
+      py = l[1];
+      pz = l[2];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      px=fPx;
+      py=fPy;
+      pz=fPz;
+    }
     return;
 }
 //______________________________________________________________________
@@ -341,8 +527,13 @@ Float_t AliITShit::GetPXL(){
     g[0] = fPx;
     g[1] = fPy;
     g[2] = fPz;
-    gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
-    return l[0];
+    if (gm) {
+      gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
+      return l[0];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      return fPx;
+    }
 }
 //______________________________________________________________________
 Float_t AliITShit::GetPYL(){
@@ -356,8 +547,14 @@ Float_t AliITShit::GetPYL(){
     g[0] = fPx;
     g[1] = fPy;
     g[2] = fPz;
-    gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
-    return l[1];
+    if (gm) {
+      gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
+      return l[1];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      return fPy;
+    }
+
 }
 //______________________________________________________________________
 Float_t AliITShit::GetPZL(){
@@ -371,8 +568,14 @@ Float_t AliITShit::GetPZL(){
     g[0] = fPx;
     g[1] = fPy;
     g[2] = fPz;
-    gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
-    return l[2];
+    if (gm) {
+      gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
+      return l[2];
+    } else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      return fPz;
+    }
+
 }
 //___________________________________________________________________________;
 Int_t AliITShit::GetModule(){
@@ -381,7 +584,11 @@ Int_t AliITShit::GetModule(){
 ////////////////////////////////////////////////////////////////////////
     AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
 
-    return gm->GetModuleIndex(fLayer,fLadder,fDet);
+    if (gm) return gm->GetModuleIndex(fLayer,fLadder,fDet);
+    else {
+      Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
+      return 0;
+    }
 }
 //______________________________________________________________________
 TParticle * AliITShit::GetParticle(){
@@ -390,41 +597,69 @@ TParticle * AliITShit::GetParticle(){
 // this hit. From the TParticle all kinds of information about this 
 // particle can be found. See the TParticle class.
 ////////////////////////////////////////////////////////////////////////
-    TClonesArray *Parts = gAlice->Particles();
-    return ((TParticle*)Parts->UncheckedAt(this->GetTrack()));
+    return gAlice->Particle(GetTrack());
+}  
+//----------------------------------------------------------------------
+void AliITShit::Print(ostream *os){
+////////////////////////////////////////////////////////////////////////
+// Standard output format for this class.
+////////////////////////////////////////////////////////////////////////
+#if defined __GNUC__
+#if __GNUC__ > 2
+    ios::fmtflags fmt;
+#else
+    Int_t fmt;
+#endif
+#else
+#if defined __ICC || defined __ECC
+    ios::fmtflags fmt;
+#else
+    Int_t fmt;
+#endif
+#endif
+    fmt = os->setf(ios::scientific);  // set scientific floating point output
+    *os << fTrack << " " << fX << " " << fY << " " << fZ << " ";
+    fmt = os->setf(ios::hex); // set hex for fStatus only.
+    *os << fStatus << " ";
+    fmt = os->setf(ios::dec); // every thing else decimel.
+    *os << fLayer << " " << fLadder << " " << fDet << " ";;
+    *os << fPx << " " << fPy << " " << fPz << " ";
+    *os << fDestep << " " << fTof;
+    *os << " " << fx0 << " " << fy0 << " " << fz0;
+//    *os << " " << endl;
+    os->flags(fmt); // reset back to old formating.
+    return;
 }
-//___________________________________________________________________________
-void AliITShit::Streamer(TBuffer &R__b){
-////////////////////////////////////////////////////////////////////////
-//     The streamer function for this AliITShit class. This has been set
-// up so that future changes to this class can be easly incorporated.
-////////////////////////////////////////////////////////////////////////
-   if (R__b.IsReading()) {
-      Version_t R__v = R__b.ReadVersion(); 
-      if (R__v==1) {
-         AliHit::Streamer(R__b);
-         R__b >> fStatus;
-         R__b >> fLayer;
-         R__b >> fLadder;
-         R__b >> fDet;
-         R__b >> fPx;
-         R__b >> fPy;
-         R__b >> fPz;
-         R__b >> fDestep;
-         R__b >> fTof;
-      }else{ // for futrue changes to this class.
-      } // end if R__v==1
-   } else {
-      R__b.WriteVersion(AliITShit::IsA());
-      AliHit::Streamer(R__b);
-      R__b << fStatus;
-      R__b << fLayer;
-      R__b << fLadder;
-      R__b << fDet;
-      R__b << fPx;
-      R__b << fPy;
-      R__b << fPz;
-      R__b << fDestep;
-      R__b << fTof;
-   } // end if R__b.IsReading()
+//----------------------------------------------------------------------
+void AliITShit::Read(istream *is){
+////////////////////////////////////////////////////////////////////////
+// Standard input format for this class.
+////////////////////////////////////////////////////////////////////////
+
+    *is >> fTrack >> fX >> fY >> fZ;
+    *is >> fStatus >> fLayer >> fLadder >> fDet >> fPx >> fPy >> fPz >>
+          fDestep >> fTof;
+    *is >> fx0 >> fy0 >> fz0;
+    return;
+}
+//----------------------------------------------------------------------
+ostream &operator<<(ostream &os,AliITShit &p){
+////////////////////////////////////////////////////////////////////////
+// Standard output streaming function.
+////////////////////////////////////////////////////////////////////////
+    p.Print(&os);
+    return os;
+}
+//----------------------------------------------------------------------
+istream &operator>>(istream &is,AliITShit &r){
+////////////////////////////////////////////////////////////////////////
+// Standard input streaming function.
+////////////////////////////////////////////////////////////////////////
+    r.Read(&is);
+    return is;
 }
+//----------------------------------------------------------------------