]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSgeomSPD.cxx
Modified file access mode
[u/mrichter/AliRoot.git] / ITS / AliITSgeomSPD.cxx
index 607dcd6a385e0c85c94202e532734f5c6381413f..f33042a6c0e23b4cdc78164a773cbb846359d8da 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.8  2001/02/03 00:00:30  nilsen
-New version of AliITSgeom and related files. Now uses automatic streamers,
-set up for new formatted .det file which includes detector information.
-Additional smaller modifications are still to come.
+/* $Id$ */
 
-*/
+////////////////////////////////////////////////////////////////////////
+// This class is for the Silicon Pixel Detector, SPD, specific geometry.
+// It is being replaced by AliITSsegmentationSPD class. This file also
+// constains classes derived from AliITSgeomSPD which do nothing but
+// initilize this one with predefined values.
+////////////////////////////////////////////////////////////////////////
 
-#include <iostream.h>
-#include <iomanip.h>
+#include <Riostream.h>
+#include <TGeometry.h>
 #include <TShape.h>
 #include <TMath.h>
 
@@ -31,25 +31,36 @@ Additional smaller modifications are still to come.
 
 ClassImp(AliITSgeomSPD)
 
-AliITSgeomSPD::AliITSgeomSPD(){
+AliITSgeomSPD::AliITSgeomSPD():
+TObject(),
+fName(),
+fTitle(),
+fMat(),
+fDx(0.0),
+fDy(0.0),
+fDz(0.0),
+fNbinx(0),
+fNbinz(0),
+fLowBinEdgeX(0),
+fLowBinEdgeZ(0){
 // Default Constructor. Set everthing to null.
-
-    fShapeSPD    = 0;
-    fNbinx       = 0;
-    fNbinz       = 0;
-    fLowBinEdgeX = 0;
-    fLowBinEdgeZ = 0;
 }
 //______________________________________________________________________
 AliITSgeomSPD::AliITSgeomSPD(Float_t dy,Int_t nx,Float_t *bx,
-                            Int_t nz,Float_t *bz){
+                            Int_t nz,Float_t *bz):
+TObject(),
+fName(),
+fTitle(),
+fMat(),
+fDx(0.0),
+fDy(0.0),
+fDz(0.0),
+fNbinx(0),
+fNbinz(0),
+fLowBinEdgeX(0),
+fLowBinEdgeZ(0){
 // Standard Constructor. Set everthing to null.
 
-    fShapeSPD    = 0;
-    fNbinx       = 0;
-    fNbinz       = 0;
-    fLowBinEdgeX = 0;
-    fLowBinEdgeZ = 0;
     ReSetBins(dy,nx,bx,nz,bz);
     return;
 }
@@ -66,9 +77,10 @@ void AliITSgeomSPD::ReSetBins(Float_t dy,Int_t nx,Float_t *bx,
     dx *= 0.5;
     dz *= 0.5;
 
-    delete fShapeSPD; // delete existing shape
-    if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX; // delete existing
-    if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ; // delete existing
+    if(fLowBinEdgeX) delete[] fLowBinEdgeX; // delete existing
+    if(fLowBinEdgeZ) delete[] fLowBinEdgeZ; // delete existing
+    fLowBinEdgeX = 0;
+    fLowBinEdgeZ = 0;
 
     SetNbinX(nx);
     SetNbinZ(nz);
@@ -78,47 +90,72 @@ void AliITSgeomSPD::ReSetBins(Float_t dy,Int_t nx,Float_t *bx,
     fLowBinEdgeZ[0] = -dz;
     for(i=0;i<nx;i++) fLowBinEdgeX[i+1] = fLowBinEdgeX[i] + bx[i];
     for(i=0;i<nz;i++) fLowBinEdgeZ[i+1] = fLowBinEdgeZ[i] + bz[i];
-    SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,dy,dz);
+    SetShape("ActiveSPD","Active volume of SPD","",dx,dy,dz);
     return;
 }
 //______________________________________________________________________
-AliITSgeomSPD::AliITSgeomSPD(AliITSgeomSPD &source){
+AliITSgeomSPD::AliITSgeomSPD(AliITSgeomSPD &source) : TObject(source),
+fName(source.fName),
+fTitle(source.fTitle),
+fMat(source.fMat),
+fDx(source.fDx),
+fDy(source.fDy),
+fDz(source.fDz),
+fNbinx(source.fNbinx),
+fNbinz(source.fNbinz),
+fLowBinEdgeX(0),
+fLowBinEdgeZ(0){
     // Copy constructor
+  InitLowBinEdgeX();
+  InitLowBinEdgeZ();
+  for(Int_t i=0;i<fNbinx;i++) fLowBinEdgeX[i] = source.fLowBinEdgeX[i];
+  for(Int_t i=0;i<fNbinz;i++) fLowBinEdgeZ[i] = source.fLowBinEdgeZ[i];
 
-    *this = source; // just use the = operator for now.
-    return;
+  
 }
 //______________________________________________________________________
 AliITSgeomSPD& AliITSgeomSPD::operator=(AliITSgeomSPD &source){
     // = operator
-    Int_t i;
-
-    if(&source == this) return *this;
-    this->fShapeSPD = new TBRIK(*(source.fShapeSPD));
-    if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX;
-    if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ;
-    this->fNbinx = source.fNbinx;
-    this->fNbinz = source.fNbinz;
-    this->InitLowBinEdgeX();
-    this->InitLowBinEdgeZ();
-    for(i=0;i<fNbinx;i++) this->fLowBinEdgeX[i] = source.fLowBinEdgeX[i];
-    for(i=0;i<fNbinz;i++) this->fLowBinEdgeZ[i] = source.fLowBinEdgeZ[i];
-    return *this;
+  this->~AliITSgeomSPD();
+  new(this) AliITSgeomSPD(source);
+  return *this;
 }
 //______________________________________________________________________
 AliITSgeomSPD::~AliITSgeomSPD(){
 // Destructor
 
-    delete fShapeSPD;
-    if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX;
-    if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ;
-    fShapeSPD    = 0;
+    if(fLowBinEdgeX) delete[] fLowBinEdgeX;
+    if(fLowBinEdgeZ) delete[] fLowBinEdgeZ;
     fNbinx       = 0;
     fNbinz       = 0;
     fLowBinEdgeX = 0;
     fLowBinEdgeZ = 0;
 }
 //______________________________________________________________________
+void AliITSgeomSPD::SetShape(const char *name,const char *title,
+                            const char * /*mat*/,Float_t dx,Float_t dy,Float_t dz){
+    // Delete any existing shape info and replace it with a new
+    // shape information.
+    // Inputs:
+    //   char * name  Name of the shape
+    //   char * title Title of the shape
+    //   char * mat   Material name for the shape
+    //   Float_t dx   half width of the shape [cm]
+    //   Float_t dy   half thickness of the shape [cm]
+    //   Float_t dz   half length of the shape [cm]
+    // Outputs:
+    //   none.
+    // Return:
+    //   none.
+
+    fName  = name;
+    fTitle = title;
+    fDx    = dx;
+    fDy    = dy;
+    fDz    = dz;
+    return;
+}
+//______________________________________________________________________
 void AliITSgeomSPD::LToDet(Float_t xl,Float_t zl,Int_t &row,Int_t &col){
 // Returns the row and column pixel numbers for a given local coordinate
 // system. If they are outside then it will return -1 or fNbinx/z.
@@ -152,7 +189,19 @@ void AliITSgeomSPD::DetToL(Int_t row,Int_t col,Float_t &xl,Float_t &zl){
 void AliITSgeomSPD::Print(ostream *os) const {
 // Standard output format for this class
     Int_t i;
+#if defined __GNUC__
+#if __GNUC__ > 2
+    ios::fmtflags fmt;
+#else
+    Int_t fmt;
+#endif
+#else
+#if defined __ICC || defined __ECC || defined __xlC__
+    ios::fmtflags fmt;
+#else
     Int_t fmt;
+#endif
+#endif
 
     fmt = os->setf(ios::scientific); // set scientific floating point output
     *os << "TBRIK" << " ";
@@ -177,8 +226,7 @@ void AliITSgeomSPD::Read(istream *is){
     *is >> shape;
     if(strcmp(shape,"TBRIK")) Warning("::Read","Shape not a TBRIK");
     *is >> dx >> dy >> dz;
-    if(fShapeSPD!=0) delete fShapeSPD;
-    SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,dy,dz);
+    SetShape("ActiveSPD","Active volume of SPD","",dx,dy,dz);
     *is >> i >> j;
     SetNbinX(i);
     SetNbinZ(j);
@@ -208,32 +256,6 @@ istream &operator>>(istream &is,AliITSgeomSPD &r){
 }
 //=====================================================================
 
-/*
-$Log$
-Revision 1.8  2001/02/03 00:00:30  nilsen
-New version of AliITSgeom and related files. Now uses automatic streamers,
-set up for new formatted .det file which includes detector information.
-Additional smaller modifications are still to come.
-
-Revision 1.7  2000/10/02 16:32:35  barbera
-Forward declaration added
-
-Revision 1.1.2.8  2000/10/02 15:52:05  barbera
-Forward declaration added
-
-Revision 1.6  2000/07/10 16:07:18  fca
-Release version of ITS code
-
-Revision 1.4  2000/06/10 20:34:37  nilsen
-Fixed compilation warning with HP unix.
-
-Revision 1.3  2000/06/10 10:43:04  nilsen
-Fixed bug in copy and operator =.
-
-*/
-
-//#include "AliITSgeomSPD300.h"
-
 ClassImp(AliITSgeomSPD300)
 
 AliITSgeomSPD300::AliITSgeomSPD300() : AliITSgeomSPD(){
@@ -254,8 +276,6 @@ const Int_t   knbinz = 279;    // number of pixels along z direction.
     Int_t i;
     Float_t dx=0.0,dz=0.0;
 
-//    cout << "AliITSgeomSPD300 default creator called: start" << endl;
-
     SetNbinX(knbinx); // default number of bins in x.
     SetNbinZ(knbinz); // default number of bins in z.
 
@@ -275,8 +295,7 @@ const Int_t   knbinz = 279;    // number of pixels along z direction.
 
     if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4) 
        Warning("Default Creator","Detector size may not be write.");
-    SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,kdy,dz);
-//    cout << "AliITSgeomSPD300 default creator called: end" << endl;
+    SetShape("ActiveSPD","Active volume of SPD","",dx,kdy,dz);
 }
 //----------------------------------------------------------------------
 ostream &operator<<(ostream &os,AliITSgeomSPD300 &p){
@@ -297,48 +316,32 @@ istream &operator>>(istream &is,AliITSgeomSPD300 &r){
     return is;
 }
 //=====================================================================
-/*
-$Log$
-Revision 1.8  2001/02/03 00:00:30  nilsen
-New version of AliITSgeom and related files. Now uses automatic streamers,
-set up for new formatted .det file which includes detector information.
-Additional smaller modifications are still to come.
-
-Revision 1.7  2000/10/02 16:32:35  barbera
-Forward declaration added
-
-Revision 1.1.2.8  2000/10/02 15:52:05  barbera
-Forward declaration added
-
-Revision 1.6  2000/07/10 16:07:18  fca
-Release version of ITS code
-
-Revision 1.4  2000/06/10 20:34:22  nilsen
-Fixed compilation warning with HP unix.
-
-Revision 1.3  2000/06/10 10:42:49  nilsen
-Fixed bug in copy and operator =.
-
-
-*/
-
-//#include "AliITSgeomSPD425Short.h"
 
 ClassImp(AliITSgeomSPD425Short)
 
-AliITSgeomSPD425Short::AliITSgeomSPD425Short(){
+AliITSgeomSPD425Short::AliITSgeomSPD425Short() : AliITSgeomSPD(){
 ////////////////////////////////////////////////////////////////////////
 //    default constructor, for ITS post TDR geometry. This only consists of
 // a default constructor to construct the defalut post TDR SPD detector 
 // geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
 // micron pixels (large detector).
+////////////////////////////////////////////////////////////////////////
+}
+//----------------------------------------------------------------------
+AliITSgeomSPD425Short::AliITSgeomSPD425Short(Int_t npar,Float_t *par) :
+                                                              AliITSgeomSPD(){
+////////////////////////////////////////////////////////////////////////
+//    Standard constructor, for ITS post TDR geometry. This only consists of
+// a default constructor to construct the defalut post TDR SPD detector 
+// geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
+// micron pixels (large detector).
 ////////////////////////////////////////////////////////////////////////
 
-    const Float_t kdx=0.6400,kdy=0.015,kdz=3.480;   // cm; Standard pixel
-                                                    // detector size is 2dx
-                                                    //  wide, 2dz long, and
-                                                    //  2dy thick. Geant 3.12
-                                                    // units.
+    const Float_t kdx=0.6400/*,kdy=0.015*/,kdz=3.480; // cm; Standard pixel
+                                                      // detector size is 2dx
+                                                      //  wide, 2dz long, and
+                                                      //  2dy thick. Geant 3.12
+                                                      // units.
     const Float_t kbinx0 = 0.0050; // cm; Standard pixel size in x direction.
     const Int_t   knbinx = 256;    // number of pixels along x direction.
     const Float_t kbinz0 = 0.0425; // cm; Standard pixel size in z direction.
@@ -374,7 +377,13 @@ AliITSgeomSPD425Short::AliITSgeomSPD425Short(){
     for(i=0;i<knbinz;i++) dz += binSizeZ[i];
     dz *= 0.5;
 
-    SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,kdy,dz);
+    if(npar<3){
+       Error("AliITSgeomSPD425Short",
+              "npar=%d<3 array par must be at least [3] or larger",npar);
+       return;
+    } // end if
+    SetShape("ActiveSPD","Active volume of SPD","",
+            par[0],par[1],par[2]);
     if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4) 
        Warning("Default Creator","Detector size may not be write.");
 
@@ -405,33 +414,6 @@ istream &operator>>(istream &is,AliITSgeomSPD425Short &r){
 }
 //======================================================================
 
-/*
-$Log$
-Revision 1.8  2001/02/03 00:00:30  nilsen
-New version of AliITSgeom and related files. Now uses automatic streamers,
-set up for new formatted .det file which includes detector information.
-Additional smaller modifications are still to come.
-
-Revision 1.7  2000/10/02 16:32:35  barbera
-Forward declaration added
-
-Revision 1.1.2.8  2000/10/02 15:52:05  barbera
-Forward declaration added
-
-Revision 1.6  2000/07/10 16:07:18  fca
-Release version of ITS code
-
-Revision 1.4  2000/06/10 20:34:22  nilsen
-Fixed compilation warning with HP unix.
-
-Revision 1.3  2000/06/10 10:42:49  nilsen
-Fixed bug in copy and operator =.
-
-
-*/
-
-//#include "AliITSgeomSPD425Long.h"
-
 ClassImp(AliITSgeomSPD425Long)
 
 AliITSgeomSPD425Long::AliITSgeomSPD425Long(){
@@ -451,7 +433,7 @@ AliITSgeomSPD425Long::AliITSgeomSPD425Long(){
     const Int_t   knbinx = 256;    // number of pixels along x direction.
     const Float_t kbinz0 = 0.0425; // cm; Standard pixel size in z direction.
     const Float_t kbinz1 = 0.0625; // cm; Special pixel size in z direction.
-    const Int_t   knbinz = 196;    // number of pixels along z direction.
+    const Int_t   knbinz = 192;    // number of pixels along z direction.
     Int_t i;
     Float_t dx,dz,*binSizeX,*binSizeZ;
 
@@ -465,17 +447,17 @@ AliITSgeomSPD425Long::AliITSgeomSPD425Long(){
     binSizeZ[ 31] = kbinz1;
     binSizeZ[ 32] = kbinz1;
 
+    binSizeZ[ 63] = kbinz1;
     binSizeZ[ 64] = kbinz1;
-    binSizeZ[ 65] = kbinz1;
 
-    binSizeZ[ 97] = kbinz1;
-    binSizeZ[ 98] = kbinz1;
+    binSizeZ[ 95] = kbinz1;
+    binSizeZ[ 96] = kbinz1;
 
-    binSizeZ[130] = kbinz1;
-    binSizeZ[131] = kbinz1;
+    binSizeZ[127] = kbinz1;
+    binSizeZ[128] = kbinz1;
 
-    binSizeZ[163] = kbinz1;
-    binSizeZ[164] = kbinz1;
+    binSizeZ[159] = kbinz1;
+    binSizeZ[160] = kbinz1;
 
     // correct detector size for bin size.
     dx = 0.0;
@@ -485,7 +467,7 @@ AliITSgeomSPD425Long::AliITSgeomSPD425Long(){
     for(i=0;i<knbinz;i++) dz += binSizeZ[i];
     dz *= 0.5;
 
-    SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,kdy,dz);
+    SetShape("ActiveSPD","Active volume of SPD","",dx,kdy,dz);
     if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4) 
        Warning("Default Creator","Detector size may not be write.");