]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCParam.cxx
Add signal fitting to chain of analysis (Marian)
[u/mrichter/AliRoot.git] / TPC / AliTPCParam.cxx
index bf99ecf237b030c5eacd8928e35f22512a19a30b..4d90fd272f4fef9293b618bfeed8317b271a3fd3 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.10  2000/07/10 20:57:39  hristov
-Update of TPC code and macros by M.Kowalski
-
-Revision 1.9  2000/06/30 12:07:50  kowal2
-Updated from the TPC-PreRelease branch
-
-Revision 1.8.4.4  2000/06/26 07:39:42  kowal2
-Changes to obey the coding rules
-
-Revision 1.8.4.3  2000/06/25 08:38:41  kowal2
-Splitted from AliTPCtracking
-  
-Revision 1.8.4.2  2000/06/14 16:48:24  kowal2
-Parameter setting improved. Removed compiler warnings
-
-Revision 1.8.4.1  2000/06/09 07:12:21  kowal2  
-
-Updated defaults
-
-Revision 1.8  2000/04/17 09:37:33  kowal2
-removed obsolete AliTPCDigitsDisplay.C
-
-Revision 1.7.8.2  2000/04/10 08:44:51  kowal2
-
-New transformations added
-Different pad and pad-rows geometries for different sectors
-
-Revision 1.7.8.1  2000/04/10 07:56:53  kowal2
-Not used anymore - removed
-
-Revision 1.7  1999/10/08 13:10:35  fca
-Values in SetDefault are in radiants
-
-Revision 1.6  1999/10/08 06:27:59  fca
-Defaults updated
-
-Revision 1.5  1999/10/05 17:18:27  fca
-Correct GetWire check on even/odd fnWires
-
-Revision 1.4  1999/09/29 09:24:34  fca
-Introduction of the Copyright and cvs Log
-
-*/
+/* $Id$ */
 
 ///////////////////////////////////////////////////////////////////////
 //  Manager and of geomety  classes for set: TPC                     //
@@ -72,14 +28,13 @@ Introduction of the Copyright and cvs Log
 
 //
 
-#include <iostream.h>
-#include <TMath.h>
-#include <TObject.h>
-#include <TRandom.h>
 #include <AliTPCParam.h>
 
-
-
+#include <TGeoManager.h>
+#include <TGeoPhysicalNode.h>
+#include "AliAlignObj.h"
+#include "AliAlignObjAngles.h"
+#include "AliLog.h"
 
 ClassImp(AliTPCParam)
 
@@ -94,7 +49,8 @@ AliTPCParam::AliTPCParam()
   fResponseBin = 0;
   fResponseWeight = 0;
   fRotAngle = 0;
-  SetTitle("75x40_100x60");
+  fTrackingMatrix = fClusterMatrix = fGlobalMatrix = 0;
+  SetTitle("75x40_100x60_150x60");
   SetDefault();  
 }
 
@@ -108,6 +64,24 @@ AliTPCParam::~AliTPCParam()
   if (fResponseWeight!=0) delete [] fResponseWeight;
   if (fRotAngle      !=0) delete [] fRotAngle;
 
+  if (fTrackingMatrix) {
+    for(Int_t i = 0; i < fNSector; i++)
+      delete fTrackingMatrix[i];
+    delete [] fTrackingMatrix;
+  }
+
+  if (fClusterMatrix) {
+    for(Int_t i = 0; i < fNSector; i++)
+      delete fClusterMatrix[i];
+    delete [] fClusterMatrix;
+  }
+
+  if (fGlobalMatrix) {
+    for(Int_t i = 0; i < fNSector; i++)
+      delete fGlobalMatrix[i];
+    delete [] fGlobalMatrix;
+  }
+
 }
 
 
@@ -131,7 +105,7 @@ Int_t  AliTPCParam::Transform0to1(Float_t *xyz, Int_t * index)  const
       if ( (xyz[0]>0) && (xyz[1]<0) ) angle=2*TMath::Pi()+angle;
     }
 
-  sector=Int_t((angle-fInnerAngleShift)/fInnerAngle);      
+  sector=Int_t(TMath::Nint((angle-fInnerAngleShift)/fInnerAngle));      
  
   Float_t cos,sin;
   AdjustCosSin(sector,cos,sin);
@@ -139,7 +113,7 @@ Int_t  AliTPCParam::Transform0to1(Float_t *xyz, Int_t * index)  const
 
   if (x1>fOuterRadiusLow)
     {
-      sector=Int_t((angle-fOuterAngleShift)/fOuterAngle)+fNInnerSector;      
+      sector=Int_t(TMath::Nint((angle-fOuterAngleShift)/fOuterAngle))+fNInnerSector;      
       if (xyz[2]<0)    sector+=(fNOuterSector>>1);            
     }
     else   
@@ -149,7 +123,7 @@ Int_t  AliTPCParam::Transform0to1(Float_t *xyz, Int_t * index)  const
   return sector;
 }
 
-Bool_t  AliTPCParam::Transform(Float_t *xyz, Int_t *index, Int_t* oindex)
+Bool_t  AliTPCParam::Transform(Float_t */*xyz*/, Int_t *index, Int_t* /*oindex*/)
 {
   //transformation from input coodination system to output coordination system
   switch (index[0]){
@@ -222,7 +196,7 @@ void  AliTPCParam::SetSectorAngles(Float_t innerangle, Float_t innershift, Float
 {
   //
   // set opening angles  
-  const static  Float_t  kDegtoRad = 0.01745329251994;
+  static const  Float_t  kDegtoRad = 0.01745329251994;
   fInnerAngle = innerangle;       //opening angle of Inner sector
   fInnerAngleShift = innershift;  //shift of first inner sector center to the 0
   fOuterAngle = outerangle;       //opening angle of outer sector
@@ -258,7 +232,7 @@ Float_t  AliTPCParam::GetOuterAngleShift() const
 } 
 
 
-Int_t AliTPCParam::GetIndex(Int_t sector, Int_t row)
+Int_t AliTPCParam::GetIndex(Int_t sector, Int_t row) const
 {
   //
   //give index of the given sector and pad row 
@@ -297,77 +271,92 @@ void AliTPCParam::SetDefault()
   //
   //sector default parameters
   //
-  const static  Float_t kInnerRadiusLow = 82.97;
-  const static  Float_t kOuterRadiusLow = 133.58;
-  const static  Float_t kInnerRadiusUp  = 133.17;
-  const static  Float_t kOuterRadiusUp  = 247.78;
-  const static  Float_t kInnerAngle = 20; // 20 degrees
-  const static  Float_t kInnerAngleShift = 10;
-  const static  Float_t kOuterAngle = 20; //  20 degrees
-  const static  Float_t kOuterAngleShift = 10;
-  const static  Float_t kInnerFrameSpace = 1.5;
-  const static  Float_t kOuterFrameSpace = 1.5;
-  const static  Float_t kInnerWireMount = 1.370825926;
-  const static  Float_t kOuterWireMount = 1.370825926;
-  const static  Float_t kZLength =250.;
-  const static  Int_t   kGeometryType = 0; //straight rows 
+  static const  Float_t kInnerRadiusLow = 83.65;
+  static const  Float_t kInnerRadiusUp  = 133.3;
+  static const  Float_t kOuterRadiusLow = 133.5;
+  static const  Float_t kOuterRadiusUp  = 247.7;
+  static const  Float_t kInnerAngle = 20; // 20 degrees
+  static const  Float_t kInnerAngleShift = 10;
+  static const  Float_t kOuterAngle = 20; //  20 degrees
+  static const  Float_t kOuterAngleShift = 10;
+  static const  Float_t kInnerFrameSpace = 1.5;
+  static const  Float_t kOuterFrameSpace = 1.5;
+  static const  Float_t kInnerWireMount = 1.2;
+  static const  Float_t kOuterWireMount = 1.4;
+  static const  Float_t kZLength =250.;
+  static const  Int_t   kGeometryType = 0; //straight rows 
+  static const Int_t kNRowLow = 63;
+  static const Int_t kNRowUp1 = 64;
+  static const Int_t kNRowUp2 = 32;
+  static const Int_t  kNRowUp = 96;
   //
   //wires default parameters
   //
-  const static Int_t    kNInnerWiresPerPad = 3;
-  const static Int_t    kInnerDummyWire = 2;
-  const static Float_t  kInnerOffWire = 0.5;
-  const static Int_t    kNOuterWiresPerPad = 4;
-  const static Int_t    kOuterDummyWire = 2;
-  const static Float_t  kOuterOffWire = 0.5;
+  static const Int_t    kNInnerWiresPerPad = 3;
+  static const Int_t    kInnerDummyWire = 2;
+  static const Float_t  kInnerWWPitch = 0.25;
+  static const Float_t  kRInnerFirstWire = 84.475;
+  static const Float_t  kRInnerLastWire = 132.475;
+  static const Float_t  kInnerOffWire = 0.5;
+  static const Int_t    kNOuter1WiresPerPad = 4;
+  static const Int_t    kNOuter2WiresPerPad = 6;
+  static const Float_t  kOuterWWPitch = 0.25;  
+  static const Float_t  kROuterFirstWire = 134.225;
+  static const Float_t  kROuterLastWire = 246.975;
+  static const Int_t    kOuterDummyWire = 2;
+  static const Float_t  kOuterOffWire = 0.5;
   //
   //pad default parameters
   // 
-  const static Float_t  kInnerPadPitchLength = 0.75;
-  const static Float_t  kInnerPadPitchWidth = 0.40;
-  const static Float_t  kInnerPadLength = 0.75;
-  const static Float_t  kInnerPadWidth = 0.40;
-  const static Float_t  kOuterPadPitchLength = 1.0;
-  const static Float_t  kOuterPadPitchWidth = 0.6;
-  const static Float_t  kOuterPadLength = 1.0;
-  const static Float_t  kOuterPadWidth = 0.6;
-  const static Bool_t   kBMWPCReadout = kTRUE; //MWPC readout - another possibility GEM 
-  const static Int_t    kNCrossRows = 1; //number of rows to cross-talk
+  static const Float_t  kInnerPadPitchLength = 0.75;
+  static const Float_t  kInnerPadPitchWidth = 0.40;
+  static const Float_t  kInnerPadLength = 0.75;
+  static const Float_t  kInnerPadWidth = 0.40;
+  static const Float_t  kOuter1PadPitchLength = 1.0;
+  static const Float_t  kOuterPadPitchWidth = 0.6;
+  static const Float_t  kOuter1PadLength = 1.0;
+  static const Float_t  kOuterPadWidth = 0.6;
+  static const Float_t  kOuter2PadPitchLength = 1.5;
+  static const Float_t  kOuter2PadLength = 1.5;
+
+  static const Bool_t   kBMWPCReadout = kTRUE; //MWPC readout - another possibility GEM 
+  static const Int_t    kNCrossRows = 1; //number of rows to cross-talk
   
   //
   //gas default parameters
   //
-  const static  Float_t  kDiffT = 2.2e-2; 
-  const static  Float_t  kDiffL = 2.2e-2;
-  const static  Float_t  kGasGain = 2.e4;
-  const static  Float_t  kDriftV  =2.83e6;
-  const static  Float_t  kOmegaTau = 0.145;
-  const static  Float_t  kAttCoef = 250.;
-  const static  Float_t  kOxyCont = 5.e-6;
+  static const  Float_t  kDiffT = 2.2e-2; 
+  static const  Float_t  kDiffL = 2.2e-2;
+  static const  Float_t  kGasGain = 2.e4;
+  static const  Float_t  kDriftV  =2.83e6;
+  static const  Float_t  kOmegaTau = 0.145;
+  static const  Float_t  kAttCoef = 250.;
+  static const  Float_t  kOxyCont = 5.e-6;
   //
   //electronic default parameters
   //
-  const static  Float_t  kPadCoupling=0.5;
-  const static  Int_t    kZeroSup=2;
-  const static  Float_t  kNoise = 1000;                            
-  const static  Float_t  kChipGain = 12;
-  const static  Float_t  kChipNorm = 0.4;
-  const static  Float_t  kTSample = 2.e-7; 
-  const static  Float_t  kTFWHM   = 1.9e-7;  //fwhm of charge distribution
-  const static  Int_t    kMaxTBin =445;  
-  const static  Int_t    kADCSat  =1024;  
-  const static  Float_t  kADCDynRange =2000.;  
-  //
-  //
-  //
-  const static  Float_t kBField =0.2; 
-  const static  Float_t kNPrimLoss =10.9;
-  const static  Float_t kNTotalLoss =39.9;
+  static const  Float_t  kPadCoupling=0.5;
+  static const  Int_t    kZeroSup=2;
+  static const  Float_t  kNoise = 1000;                            
+  static const  Float_t  kChipGain = 12;
+  static const  Float_t  kChipNorm = 0.4;
+  static const  Float_t  kTSample = 2.e-7; 
+  static const  Float_t  kTFWHM   = 1.9e-7;  //fwhm of charge distribution
+  static const  Int_t    kMaxTBin =445;  
+  static const  Int_t    kADCSat  =1024;  
+  static const  Float_t  kADCDynRange =2000.;  
   // 
   //response constants
   //
-  const static Int_t     kNResponseMax=100;
-  const static Float_t   kResponseThreshold=0.01;     
+  static const Int_t     kNResponseMax=100;
+  static const Float_t   kResponseThreshold=0.01;     
+  //L1 constants
+  //  static const Float_t   kGateDelay=6.1e-6; //In s
+  static const Float_t   kGateDelay=0.; //For the moment no gating
+  //  static const Float_t   kL1Delay=6.5e-6; //In s
+  static const Float_t   kL1Delay=0.; //For the moment no delay
+  //  static const UShort_t  kNTBinsBeforeL1=14;
+  static const UShort_t  kNTBinsBeforeL1=0; //For the moment no shift
   fbStatus = kFALSE;
   //
   //set sector parameters
@@ -383,15 +372,26 @@ void AliTPCParam::SetDefault()
   SetSectorAngles(kInnerAngle,kInnerAngleShift,kOuterAngle,kOuterAngleShift);
   SetZLength(kZLength);
   SetGeometryType(kGeometryType);
+  SetRowNLow(kNRowLow);
+  SetRowNUp1 (kNRowUp1);
+  SetRowNUp2(kNRowUp2);
+  SetRowNUp(kNRowUp);
   //
   //set wire parameters
   //
   SetInnerNWires(kNInnerWiresPerPad);
   SetInnerDummyWire(kInnerDummyWire);
   SetInnerOffWire(kInnerOffWire);
-  SetOuterNWires(kNOuterWiresPerPad);
+  SetOuter1NWires(kNOuter1WiresPerPad);
+  SetOuter2NWire(kNOuter2WiresPerPad);
   SetOuterDummyWire(kOuterDummyWire);
   SetOuterOffWire(kOuterOffWire);
+  SetInnerWWPitch(kInnerWWPitch);
+  SetRInnerFirstWire(kRInnerFirstWire);
+  SetRInnerLastWire(kRInnerLastWire);
+  SetOuterWWPitch(kOuterWWPitch);
+  SetROuterFirstWire(kROuterFirstWire);
+  SetROuterLastWire(kROuterLastWire);  
   //
   //set pad parameter
   //
@@ -399,9 +399,11 @@ void AliTPCParam::SetDefault()
   SetInnerPadPitchWidth(kInnerPadPitchWidth);
   SetInnerPadLength(kInnerPadLength);
   SetInnerPadWidth(kInnerPadWidth);
-  SetOuterPadPitchLength(kOuterPadPitchLength);
+  SetOuter1PadPitchLength(kOuter1PadPitchLength); 
+  SetOuter2PadPitchLength(kOuter2PadPitchLength);
   SetOuterPadPitchWidth(kOuterPadPitchWidth);
-  SetOuterPadLength(kOuterPadLength);
+  SetOuter1PadLength(kOuter1PadLength);
+  SetOuter2PadLength(kOuter2PadLength);
   SetOuterPadWidth(kOuterPadWidth); 
   SetMWPCReadout(kBMWPCReadout);
   SetNCrossRows(kNCrossRows);
@@ -428,15 +430,19 @@ void AliTPCParam::SetDefault()
   SetMaxTBin(kMaxTBin);
   SetADCSat(kADCSat);
   SetADCDynRange(kADCDynRange);
-  //set magnetic field
-  SetBField(kBField);
-  SetNPrimLoss(kNPrimLoss);
-  SetNTotalLoss(kNTotalLoss);
+//   //set magnetic field
+//   SetBField(kBField);
+//   SetNPrimLoss(kNPrimLoss);
+//   SetNTotalLoss(kNTotalLoss);
   //
   //set response  parameters  
   //
   SetNResponseMax(kNResponseMax); 
-  SetResponseThreshold(kResponseThreshold);
+  SetResponseThreshold(static_cast<int>(kResponseThreshold));
+  //L1 data
+  SetGateDelay(kGateDelay);
+  SetL1Delay(kL1Delay);
+  SetNTBinsBeforeL1(kNTBinsBeforeL1);
 }
 
           
@@ -486,30 +492,26 @@ Bool_t AliTPCParam::Update()
     fRotAngle[i+2] =angle;
     fRotAngle[j+2] =angle;    
   }
+
   fZWidth = fTSample*fDriftV;  
   fTotalNormFac = fPadCoupling*fChipNorm*kQel*1.e15*fChipGain*fADCSat/fADCDynRange;
   fNoiseNormFac = kQel*1.e15*fChipGain*fADCSat/fADCDynRange;
   //wire section 
-  Int_t nwire;
+  /*  Int_t nwire;
   Float_t wspace; //available space for wire
   Float_t dummyspace; //dummyspace for wire
-
-  fInnerWWPitch = Float_t((Double_t)fInnerPadPitchLength/(Double_t)fNInnerWiresPerPad);  
   wspace =fInnerRadiusUp-fInnerRadiusLow-2*fInnerOffWire;
   nwire = Int_t(wspace/fInnerWWPitch);
   wspace = Float_t(nwire)*fInnerWWPitch;
-  dummyspace =(fInnerRadiusUp-fInnerRadiusLow-wspace)/2.; 
-  fRInnerFirstWire = fInnerRadiusLow+dummyspace;
-  fRInnerLastWire = fRInnerFirstWire+fInnerWWPitch*(Float_t)(nwire);
-
-  fOuterWWPitch = Float_t((Double_t)fOuterPadPitchLength/(Double_t)fNOuterWiresPerPad);  
+  dummyspace =(fInnerRadiusUp-fInnerRadiusLow-wspace)/2.;  
   wspace =fOuterRadiusUp-fOuterRadiusLow-2*fOuterOffWire;
   nwire = Int_t(wspace/fOuterWWPitch);
   wspace = Float_t(nwire)*fOuterWWPitch;
   dummyspace =(fOuterRadiusUp-fOuterRadiusLow-wspace)/2.; 
   fROuterFirstWire = fOuterRadiusLow+dummyspace;
   fROuterLastWire = fROuterFirstWire+fOuterWWPitch*(Float_t)(nwire);
-
+  */
   
   //
   //response data
@@ -518,14 +520,88 @@ Bool_t AliTPCParam::Update()
   if (fResponseWeight==0) delete [] fResponseBin;
   fResponseBin    = new Int_t[3*fNResponseMax];
   fResponseWeight = new Float_t[fNResponseMax];
-  
+
+  //L1 data
+  fNTBinsL1 = fL1Delay/fTSample - (Float_t)fNTBinsBeforeL1;
   fbStatus = kTRUE;
   return kTRUE;
 }
 
 
 
-Bool_t AliTPCParam::GetStatus()
+Bool_t AliTPCParam::ReadGeoMatrices(){
+  //
+  //read geo matrixes
+  //
+  if (!gGeoManager){
+    AliFatal("Geo manager not initialized\n");
+  }
+  AliAlignObjAngles o;
+  //
+  if (fTrackingMatrix) delete [] fTrackingMatrix;
+  fTrackingMatrix = new TGeoHMatrix*[fNSector];
+  if (fClusterMatrix) delete [] fClusterMatrix;
+  fClusterMatrix = new TGeoHMatrix*[fNSector];
+  if (fGlobalMatrix) delete [] fGlobalMatrix;
+  fGlobalMatrix = new TGeoHMatrix*[fNSector];
+  //
+  for (Int_t isec=0; isec<fNSector; isec++) {
+    fGlobalMatrix[isec] = 0;
+    fClusterMatrix[isec]= 0;
+    fTrackingMatrix[isec]=0;   
+    AliAlignObj::ELayerID iLayer;
+    Int_t iModule;
+
+    if(isec<fNInnerSector) {
+      iLayer = AliAlignObj::kTPC1;
+      iModule = isec;
+    }
+    else {
+      iLayer = AliAlignObj::kTPC2;
+      iModule = isec - fNInnerSector;
+    }
+
+    UShort_t volid = AliAlignObj::LayerToVolUID(iLayer,iModule);
+    const char *path = AliAlignObj::GetVolPath(volid);
+    gGeoManager->cd(path);
+    TGeoHMatrix* m = gGeoManager->GetCurrentMatrix();
+    //
+    TGeoRotation mchange; 
+    mchange.RotateY(90); mchange.RotateX(90);
+    Float_t ROCcenter[3]; 
+    GetChamberCenter(isec,ROCcenter);
+    //
+    // Convert to global coordinate system
+    //
+    fGlobalMatrix[isec] = new TGeoHMatrix(*m);
+    fGlobalMatrix[isec]->Multiply(&(mchange.Inverse()));
+    TGeoTranslation center("center",-ROCcenter[0],-ROCcenter[1],-ROCcenter[2]);
+    fGlobalMatrix[isec]->Multiply(&center);
+    //
+    //  cluster correction matrix
+    //
+    fClusterMatrix[isec] = new TGeoHMatrix;
+    Double_t sectorAngle = 20.*(isec%18)+10;
+    TGeoHMatrix  rotMatrix;
+    rotMatrix.RotateZ(sectorAngle);
+    if (GetGlobalMatrix(isec)->GetTranslation()[2]>0){
+      //
+      // mirrored system 
+      //
+      TGeoRotation mirrorZ;
+      mirrorZ.SetAngles(90,0,90,90,180,0);
+      fClusterMatrix[isec]->Multiply(&mirrorZ);
+    }
+    TGeoTranslation trans(0,0,GetZLength());
+    fClusterMatrix[isec]->MultiplyLeft(&trans);
+    fClusterMatrix[isec]->MultiplyLeft((GetGlobalMatrix(isec)));       
+    fClusterMatrix[isec]->MultiplyLeft(&(rotMatrix.Inverse()));
+  }
+  return kTRUE;
+}
+
+
+Bool_t AliTPCParam::GetStatus() const
 {
   //get information about object consistency
   return fbStatus;
@@ -541,6 +617,16 @@ Int_t AliTPCParam::GetNRowUp() const
   //get the number of pad rows in up sector
   return fNRowUp;
 }
+Int_t AliTPCParam::GetNRowUp1() const
+{
+  //get the number of pad rows in up1 sector
+  return fNRowUp1;
+}
+Int_t AliTPCParam::GetNRowUp2() const
+{
+  //get the number of pad rows in up2 sector
+  return fNRowUp2;
+}
 Float_t AliTPCParam::GetPadRowRadiiLow(Int_t irow) const
 {
   //get the pad row (irow) radii
@@ -577,4 +663,64 @@ Int_t AliTPCParam::GetNPadsUp(Int_t irow) const
   else
     return 0;
 }
+Float_t AliTPCParam::GetYInner(Int_t irow) const
+{
+  return fYInner[irow];
+}
+
+
+Float_t AliTPCParam::GetYOuter(Int_t irow) const
+{
+  return fYOuter[irow];
+}
+
+Int_t AliTPCParam::GetSectorIndex(Float_t angle, Int_t row, Float_t z) const
+{
+  // returns the sector index
+  // takes as input the angle, index of the pad row and z position
+  if(row<0) return -1;
+
+  if (angle > 2.*TMath::Pi()) angle -= 2.*TMath::Pi();
+  if (angle < 0.            ) angle += 2.*TMath::Pi();
+  Int_t sector;
+  if(row<fNRowLow) {
+    sector=Int_t(TMath::Nint((angle-fInnerAngleShift)/fInnerAngle));
+    if (z<0) sector += (fNInnerSector>>1);
+  }
+  else {
+    sector=Int_t(TMath::Nint((angle-fOuterAngleShift)/fOuterAngle))+fNInnerSector;      
+    if (z<0) sector += (fNOuterSector>>1);
+  }    
+  
+  return sector;
+}
+
+Float_t AliTPCParam::GetChamberCenter(Int_t isec, Float_t * center) const
+{
+  // returns the default radial position
+  // of the readout chambers
+
+  const Float_t kROCcenterIn = 110.2;
+  const Float_t kROCcenterOut = 188.45;
+
+  if (isec<fNInnerSector){
+    if (center){
+      center[0] = kROCcenterIn;
+      center[1] = 0; 
+      center[2] = -5.51; 
+    }
+    return kROCcenterIn;
+  }
+  else{
+    if (center){
+      center[0] = kROCcenterOut;
+      center[1] = 0; 
+      center[2] = -5.61; 
+    }
+    return kROCcenterOut;
+  }
+}
+
+