]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSsegmentationSDD.cxx
Fix of parsing bug related to the reading of the calib header. Added consistency...
[u/mrichter/AliRoot.git] / ITS / AliITSsegmentationSDD.cxx
index 32c8f34a21d4eb931299f8515df0fc57a2583226..1ea2beaf800cb1ab71e3c0d77019a9b50bc9320b 100644 (file)
@@ -19,8 +19,7 @@
 // #include "AliITS.h"
 #include "AliITSgeom.h"
 #include "AliITSgeomSDD.h"
-#include "AliITSresponse.h"
-
+#include "AliITSresponseSDD.h"
 //////////////////////////////////////////////////////
 // Segmentation class for                           //
 // drift detectors                                  //
@@ -37,11 +36,16 @@ const Int_t AliITSsegmentationSDD::fgkNsamplesDefault = 256;
 
 ClassImp(AliITSsegmentationSDD)
 //----------------------------------------------------------------------
-AliITSsegmentationSDD::AliITSsegmentationSDD(AliITSgeom* geom,
-                                            AliITSresponse *resp){
+AliITSsegmentationSDD::AliITSsegmentationSDD(AliITSgeom* geom):
+fNsamples(0),
+fNanodes(0),
+fPitch(0),
+fTimeStep(0),
+fDriftSpeed(0),
+fSetDriftSpeed(0){
   // constructor
    fGeom=geom;
-   fDriftSpeed=resp->DriftSpeed();
+   fDriftSpeed=AliITSresponseSDD::DefaultDriftSpeed();
    fCorr=0;
    SetDetSize(fgkDxDefault,fgkDzDefault,fgkDyDefault);
    SetPadSize(fgkPitchDefault,fgkClockDefault);
@@ -49,7 +53,13 @@ AliITSsegmentationSDD::AliITSsegmentationSDD(AliITSgeom* geom,
 
 }
 //______________________________________________________________________
-AliITSsegmentationSDD::AliITSsegmentationSDD() : AliITSsegmentation(){
+AliITSsegmentationSDD::AliITSsegmentationSDD() : AliITSsegmentation(),
+fNsamples(0),
+fNanodes(0),
+fPitch(0),
+fTimeStep(0),
+fDriftSpeed(0),
+fSetDriftSpeed(0){
   // Default constructor
    fDriftSpeed=0;  
    SetDetSize(fgkDxDefault,fgkDzDefault,fgkDyDefault);
@@ -67,6 +77,7 @@ void AliITSsegmentationSDD::Copy(TObject &obj) const {
   ((AliITSsegmentationSDD& ) obj).fPitch = fPitch;
   ((AliITSsegmentationSDD& ) obj).fTimeStep = fTimeStep;
   ((AliITSsegmentationSDD& ) obj).fDriftSpeed = fDriftSpeed;
+  ((AliITSsegmentationSDD& ) obj).fSetDriftSpeed = fSetDriftSpeed;
 }
 
 //______________________________________________________________________
@@ -79,7 +90,13 @@ AliITSsegmentationSDD& AliITSsegmentationSDD::operator=(const AliITSsegmentation
 
 //____________________________________________________________________________
 AliITSsegmentationSDD::AliITSsegmentationSDD(const AliITSsegmentationSDD &source) :
-    AliITSsegmentation(source){
+    AliITSsegmentation(source),
+fNsamples(0),
+fNanodes(0),
+fPitch(0),
+fTimeStep(0),
+fDriftSpeed(0),
+fSetDriftSpeed(0){
   // copy constructor
   source.Copy(*this);
 }
@@ -139,6 +156,10 @@ void AliITSsegmentationSDD::GetPadIxz(Float_t x,Float_t z,
 
     timebin+=1;
     anode+=1;
+    if(!fSetDriftSpeed){
+      timebin=-999;
+      Warning("GetPadIxz","Drift speed not set: timebin is dummy");
+    }
 
 }
 //----------------------------------------------------------------------
@@ -157,6 +178,10 @@ void AliITSsegmentationSDD::GetPadCxz(Int_t timebin,Int_t anode,
     else x = -(fDx-driftpath)/kconv;
     if (anode >= na) anode-=na;
     z=((anode+0.5)*fPitch-fDz/2)/kconv;
+    if(!fSetDriftSpeed){
+      x=-9999.;
+      Warning("GetPadCxz","Drift speed not set: x coord. is dummy");
+    }
 
 }
 //----------------------------------------------------------------------
@@ -173,7 +198,10 @@ void AliITSsegmentationSDD::GetPadTxz(Float_t &x,Float_t &z) const{
     x=driftpath/fDriftSpeed/fTimeStep;
     z=kconv*z/fPitch + (float)na/2;
     if (x0 < 0) x = -x;
-
+    if(!fSetDriftSpeed){
+      x=-9999.;
+      Warning("GetPadTxz","Drift speed not set: x coord. is dummy");
+    }
 }
 //----------------------------------------------------------------------
 void AliITSsegmentationSDD::GetLocal(Int_t module,Float_t *g ,Float_t *l) const {
@@ -236,7 +264,8 @@ void AliITSsegmentationSDD::PrintDefaultParameters() const {
 }
 
 //______________________________________________________________________
-void AliITSsegmentationSDD::LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz) const {
+Bool_t AliITSsegmentationSDD::LocalToDet(Float_t x,Float_t z,
+                                         Int_t &ix,Int_t &iz) const {
 // Transformation from Geant detector centered local coordinates (cm) to
 // time bucket numbers ix and anode number iz.
 // Input:
@@ -275,11 +304,11 @@ void AliITSsegmentationSDD::LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz)
     dz = -0.5*kconv*Dz(); // lower left edge in cm.
     if(x<dx || x>-dx) {
       Warning("LocalToDet","input argument %f out of range (%f, %f)",x,dx,-dx);
-      return; // outside of defined volume.
+      return kFALSE; // outside of defined volume.
     }
     if(z<dz || z>-dz) {
       Warning("LocalToDet","input argument %f out of range (%f, %f)",z,dz,-dz);
-      return; // outside of defined volume.
+      return kFALSE; // outside of defined volume.
     }
     tb = fDriftSpeed*fTimeStep*kconv; // compute size of time bin.
     if(x>0) dx = -(dx + x)/tb; // distance from + side in time bin units
@@ -288,7 +317,12 @@ void AliITSsegmentationSDD::LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz)
     ix = (Int_t) dx;   // time bin
     iz = (Int_t) dz;   // anode
     if(x>0) iz += Npz()/2; // if x>0 then + side anodes values.
-    return; // Found ix and iz, return.
+    if(!fSetDriftSpeed){
+      tb=-999;
+      Warning("LocalToDet","Drift speed not set: timebin is dummy");
+      return kFALSE;
+    }
+    return kTRUE; // Found ix and iz, return.
 }
 //______________________________________________________________________
 void AliITSsegmentationSDD::DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z) const
@@ -344,5 +378,9 @@ void AliITSsegmentationSDD::DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z)
     if(iz>=Npz()/2) iz -=Npz()/2;// If +x side don't count anodes from -x side.
     for(j=0;j<iz;j++) z += kconv*fPitch; // sum up cell iz-1
     z += 0.5*kconv*fPitch; // add 1/2 of cell iz for center location.
+    if(!fSetDriftSpeed){
+      x=-9999.;
+      Warning("LocalToDet","Drift speed not set: x coord. is dummy");
+    }
     return; // Found x and z, return.
 }