]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDfeeParam.cxx
reduce binning and ranges
[u/mrichter/AliRoot.git] / TRD / AliTRDfeeParam.cxx
index b84c567b51a35e478d48a58d19e97103af7d5959..ffcf834398972c61e499135a5af3c2b408ffb05c 100644 (file)
 
 /* $Id$ */
 
-/*
-
-  New release on 2007/08/17
-
-The default raw data version (now fRAWversion ) is set to 3
-in the constructer because version 3 raw data read and write
-are fully debugged.
-
-*/
-
-//////////////////////////////////////////////////
-//                                              //
-//  TRD front end electronics parameters class  //
-//  Contains all FEE (MCM, TRAP, PASA) related  //
-//  parameters, constants, and mapping.         //
-//                                              //
-//////////////////////////////////////////////////
-
-#include <TMath.h>
+////////////////////////////////////////////////////////////////////////////
+//                                                                        //
+//  TRD front end electronics parameters class                            //
+//  Contains all FEE (MCM, TRAP, PASA) related                            //
+//  parameters, constants, and mapping.                                   //
+//                                                                        //
+//  New release on 2007/08/17:                                            //
+//   The default raw data version (now fRAWversion ) is set to 3          //
+//   in the constructor because version 3 raw data read and write         //
+//   are fully debugged.                                                  //
+//                                                                        //
+//  Author:                                                               //
+//    Ken Oyama (oyama@physi.uni-heidelberg.de)                           //
+//                                                                        //
+////////////////////////////////////////////////////////////////////////////
+
+//#include <TMath.h>
 
 #include "AliLog.h"
 
 #include "AliTRDfeeParam.h"
-#include "AliTRDgeometry.h"
+//#include "AliTRDgeometry.h"
 #include "AliTRDCommonParam.h"
 
 ClassImp(AliTRDfeeParam)
 
 AliTRDfeeParam *AliTRDfeeParam::fgInstance   = 0;
 Bool_t          AliTRDfeeParam::fgTerminated = kFALSE;
+Bool_t          AliTRDfeeParam::fgTracklet = kFALSE;
 
 //_____________________________________________________________________________
 AliTRDfeeParam* AliTRDfeeParam::Instance()
 {
+  //
   // Instance constructor
-  
+  //
+
   if (fgTerminated != kFALSE) {
     return 0;
   }
@@ -61,6 +62,7 @@ AliTRDfeeParam* AliTRDfeeParam::Instance()
   }  
 
   return fgInstance;
+
 }
 
 //_____________________________________________________________________________
@@ -76,12 +78,14 @@ void AliTRDfeeParam::Terminate()
     delete fgInstance;
     fgInstance = 0;
   }
+
 }
 
 //_____________________________________________________________________________
 AliTRDfeeParam::AliTRDfeeParam()
   :TObject()
   ,fCP(0)
+  ,fTFnExp(1)
   ,fTFr1(0)
   ,fTFr2(0)
   ,fTFc1(0)
@@ -98,20 +102,19 @@ AliTRDfeeParam::AliTRDfeeParam()
   //
   
   // PASA V.4
-  if      (fgkTFnExp == 1) {
+  if      (fTFnExp == 1) {
     fTFr1 = 1.1563;
     fTFr2 = 0.1299;
     fTFc1 = 0.0657;
     fTFc2 = 0.0000;
   }
-  else if (fgkTFnExp == 2) {
+  else if (fTFnExp == 2) {
     fTFr1 = 1.1563;
     fTFr2 = 0.1299;
     fTFc1 = 0.1141;
     fTFc2 = 0.6241;
   }
 
-  //  fGeo = AliTRDgeometry::Instance();
   fCP  = AliTRDCommonParam::Instance();
 
 }
@@ -120,6 +123,7 @@ AliTRDfeeParam::AliTRDfeeParam()
 AliTRDfeeParam::AliTRDfeeParam(TRootIoCtor *)
   :TObject()
   ,fCP(0)
+  ,fTFnExp(1)
   ,fTFr1(0)
   ,fTFr2(0)
   ,fTFc1(0)
@@ -140,8 +144,8 @@ AliTRDfeeParam::AliTRDfeeParam(TRootIoCtor *)
 //_____________________________________________________________________________
 AliTRDfeeParam::AliTRDfeeParam(const AliTRDfeeParam &p)
   :TObject(p)
-  //  ,fGeo(p.fGeo)
   ,fCP(p.fCP)
+  ,fTFnExp(p.fTFnExp)
   ,fTFr1(p.fTFr1)
   ,fTFr2(p.fTFr2)
   ,fTFc1(p.fTFc1)
@@ -156,6 +160,7 @@ AliTRDfeeParam::AliTRDfeeParam(const AliTRDfeeParam &p)
   //
   // AliTRDfeeParam copy constructor
   //
+
 }
 
 //_____________________________________________________________________________
@@ -164,6 +169,7 @@ AliTRDfeeParam::~AliTRDfeeParam()
   //
   // AliTRDfeeParam destructor
   //
+
 }
 
 //_____________________________________________________________________________
@@ -176,7 +182,9 @@ AliTRDfeeParam &AliTRDfeeParam::operator=(const AliTRDfeeParam &p)
   if (this != &p) {
     ((AliTRDfeeParam &) p).Copy(*this);
   }
+
   return *this;
+
 }
 
 //_____________________________________________________________________________
@@ -186,8 +194,8 @@ void AliTRDfeeParam::Copy(TObject &p) const
   // Copy function
   //
 
-  //  ((AliTRDfeeParam &) p).fGeo     = fGeo;
   ((AliTRDfeeParam &) p).fCP          = fCP;
+  ((AliTRDfeeParam &) p).fTFnExp      = fTFnExp;
   ((AliTRDfeeParam &) p).fTFr1        = fTFr1;
   ((AliTRDfeeParam &) p).fTFr2        = fTFr2;
   ((AliTRDfeeParam &) p).fTFc1        = fTFc1;
@@ -200,16 +208,18 @@ void AliTRDfeeParam::Copy(TObject &p) const
   ((AliTRDfeeParam &) p).fRAWstoreRaw = fRAWstoreRaw;
   
   TObject::Copy(p);
+
 }
 
 //_____________________________________________________________________________
 Int_t AliTRDfeeParam::GetPadRowFromMCM(Int_t irob, Int_t imcm) const
 {
   //
-  // return on which pad row this mcm sits
+  // Return on which pad row this mcm sits
   //
   
   return fgkNmcmRobInRow*(irob/2) + imcm/fgkNmcmRobInCol;
+
 }
 
 //_____________________________________________________________________________
@@ -226,12 +236,32 @@ Int_t AliTRDfeeParam::GetPadColFromADC(Int_t irob, Int_t imcm, Int_t iadc) const
   // Caution: ADC ordering in the online data is opposite to the pad column ordering.
   // And it is not one-by-one correspondence. Precise drawing can be found in:
   // http://wiki.kip.uni-heidelberg.de/ti/TRD/index.php/Image:ROB_MCM_numbering.pdf
+  //
 
-  if (iadc < 0 || iadc > 19 ) return -100;
+  if (iadc < 0 || iadc > fgkNadcMcm ) return -100;
   Int_t mcmcol = imcm%fgkNmcmRobInCol + GetRobSide(irob)*fgkNmcmRobInCol;  // MCM column number on ROC [0..7]
   Int_t padcol = mcmcol*fgkNcolMcm + fgkNcolMcm + 1 - iadc;
-  // if( padcol < 0 || padcol >= fgkNcol ) return -1;   // thisi s commented because of reson above KO
+  if( padcol < 0 || padcol >= fgkNcol ) return -1;   // this is commented because of reason above OK
+
   return padcol;
+
+}
+
+//_____________________________________________________________________________
+Int_t AliTRDfeeParam::GetExtendedPadColFromADC(Int_t irob, Int_t imcm, Int_t iadc) const
+{     
+  //
+  // Return which pad coresponds to the extended digit container pad numbering
+  // Extended digit container is designed to store all pad data including shared pad, 
+  // so we have to introduce new virtual pad numbering scheme for this purpose. 
+  //
+    
+  if (iadc < 0 || iadc > fgkNadcMcm ) return -100;
+  Int_t mcmcol = imcm%fgkNmcmRobInCol + GetRobSide(irob)*fgkNmcmRobInCol;  // MCM column number on ROC [0..7]
+  Int_t padcol = mcmcol*fgkNadcMcm + fgkNcolMcm + 2 - iadc;
+
+  return padcol;
+
 }
 
 //_____________________________________________________________________________
@@ -245,42 +275,83 @@ Int_t AliTRDfeeParam::GetMCMfromPad(Int_t irow, Int_t icol) const
   if ( irow < 0 || icol < 0 || irow > fgkNrowC1 || icol > fgkNcol ) return -1;
 
   return (icol%(fgkNcol/2))/fgkNcolMcm + fgkNmcmRobInCol*(irow%fgkNmcmRobInRow);
+
+}
+
+//_____________________________________________________________________________
+Int_t AliTRDfeeParam::GetMCMfromSharedPad(Int_t irow, Int_t icol) const
+{
+  //
+  // Return on which MCM this pad is directry connected.
+  // Return -1 for error.
+  //
+  
+  if ( irow < 0 || icol < 0 || irow > fgkNrowC1 || icol > fgkNcol+8*3 ) return -1;
+
+  Int_t adc = 20 - (icol%18) -1;
+  switch(adc) {
+    case 2:  icol += 5; break;
+    case 18: icol -= 5; break;
+    case 19: icol -= 5; break;
+    default: icol += 0; break;
+  }
+
+  return (icol%(fgkNcol/2))/fgkNcolMcm + fgkNmcmRobInCol*(irow%fgkNmcmRobInRow);
+
 }
 
 //_____________________________________________________________________________
 Int_t AliTRDfeeParam::GetROBfromPad(Int_t irow, Int_t icol) const
 {
   //
-  // return on which rob this pad is
+  // Return on which rob this pad is
   //
 
   return (irow/fgkNmcmRobInRow)*2 + GetColSide(icol);
+
+}
+
+//_____________________________________________________________________________
+Int_t AliTRDfeeParam::GetROBfromSharedPad(Int_t irow, Int_t icol) const
+{
+  //
+  // Return on which rob this pad is for shared pads
+  //
+
+  if(icol<72) return (irow/fgkNmcmRobInRow)*2 + GetColSide(icol+5);
+  else return (irow/fgkNmcmRobInRow)*2 + GetColSide(icol-5);
+
 }
 
 //_____________________________________________________________________________
 Int_t AliTRDfeeParam::GetRobSide(Int_t irob) const
 {
   //
-  // return on which side this rob sits (A side = 0, B side = 1)
+  // Return on which side this rob sits (A side = 0, B side = 1)
   //
 
   if ( irob < 0 || irob >= fgkNrobC1 ) return -1;
+
   return irob%2;
+
 }
 
 //_____________________________________________________________________________
 Int_t AliTRDfeeParam::GetColSide(Int_t icol) const
 {
   //
-  // return on which side this column sits (A side = 0, B side = 1)
+  // Return on which side this column sits (A side = 0, B side = 1)
   //
 
   if ( icol < 0 || icol >= fgkNcol ) return -1;
+
   return icol/(fgkNcol/2);
+
 }
 
-//
-//void AliTRDfeeParam::GetFilterParam( Float_t &r1, Float_t &r2, Float_t &c1, Float_t &c2, Float_t &ped ) const
+//_____________________________________________________________________________
+//void AliTRDfeeParam::GetFilterParam( Float_t &r1, Float_t &r2, Float_t &c1
+//                                   , Float_t &c2, Float_t &ped ) const
 //{
   //
   // Return current filter parameter
@@ -296,8 +367,10 @@ Int_t AliTRDfeeParam::GetColSide(Int_t icol) const
 //_____________________________________________________________________________
 void AliTRDfeeParam::SetEBsglIndThr(Int_t val)
 {
+  //
   // Set Event Buffer Sngle Indicator Threshold (EBIS in TRAP conf).
   // Timebin is indicated if ADC value >= val.
+  //
 
   if( val >= 0 && val <= 1023 ) { 
     fEBsglIndThr = val;
@@ -305,85 +378,107 @@ void AliTRDfeeParam::SetEBsglIndThr(Int_t val)
     AliError(Form("EBsglIndThr value %d is out of range, keep previously set value (%d).",
                  val, fEBsglIndThr));
   }
+
 }
 
 //_____________________________________________________________________________
 void AliTRDfeeParam::SetEBsumIndThr(Int_t val)
 {
+  //
   // Set Event Buffer Sum Indicator Threshold (EBIT in TRAP conf).
   // Timebin is indicated if ADC sum value >= val.
+  //
 
   if( val >= 0 && val <= 4095 ) { 
     fEBsumIndThr = val;
-  } else {
+  } 
+  else {
     AliError(Form("EBsumIndThr value %d is out of range, keep previously set value (%d).",
                  val, fEBsumIndThr));
   }
-}
 
+}
 
 //_____________________________________________________________________________
 void AliTRDfeeParam::SetEBindLUT(Int_t val)
 {
+  //
   // Set Event Buffer Indicator Look-Up Table (EBIL in TRAP conf).
   // 8 bits value forms lookup table for combination of three criterions.
+  //
 
   if( val >= 0 && val <= 255 ) {
     fEBindLUT = val;
-  } else {
+  } 
+  else {
     AliError(Form("EBindLUT value %d is out of range, keep previously set value (%d).",
                  val, fEBindLUT));
   }
+
 }
 
 //_____________________________________________________________________________
 void AliTRDfeeParam::SetEBignoreNeighbour(Int_t val)
 {
+  //
   // Set Event Buffer Indicator Neighbor Sensitivity. (EBIN in TRAP conf).
   // If 0, take account of neigbor's values.
+  //
 
   if( val >= 0 && val <= 1 ) {
     fEBignoreNeighbour = val;
-  } else {
+  } 
+  else {
     AliError(Form("EBignoreNeighbour value %d is out of range, keep previously set value (%d).",
                  val, fEBignoreNeighbour));
   }
 }
 
 //_____________________________________________________________________________
-Int_t    AliTRDfeeParam::GetRAWversion()
-{
-  // Return raw data version (major number only)
-
-  return fRAWversion;
-}
-
-//_____________________________________________________________________________
-void     AliTRDfeeParam::SetRAWversion( Int_t rawver )
+void AliTRDfeeParam::SetRAWversion( Int_t rawver )
 {
+  //
   // Set raw data version (major number only)
   // Maximum available number is preset in fgkMaxRAWversion
+  //
 
   if( rawver >= 0 && rawver <= fgkMaxRAWversion ) {
-
-    fRAWversion = rawver ;
-  else {
+    fRAWversion = rawver;
+  } 
+  else {
     AliError(Form("Raw version is out of range: %d",rawver));
   }
+
 }
 
 //_____________________________________________________________________________
-Bool_t   AliTRDfeeParam::GetRAWstoreRaw()
+void AliTRDfeeParam::SetXenon()
 {
-  // Returns kTRUE if raw data itself is read instead of filtered data
+  //
+  // Sets the filter parameters for the Xenon gas mixture
+  //
+
+  fTFnExp = 1;
+  fTFr1   = 1.1563;
+  fTFr2   = 0.1299;
+  fTFc1   = 0.0657;
+  fTFc2   = 0.0000;
 
-  return fRAWstoreRaw;
 }
 
 //_____________________________________________________________________________
-void     AliTRDfeeParam::SetRAWstoreRaw( Bool_t storeraw )
+void AliTRDfeeParam::SetArgon()
 {
-  // If kTRUE is set, raw data itself is read instead of filtered data
+  //
+  // Sets the filter parameters for the Argon gas mixture
+  //
+
+  fTFnExp = 2;
+  fTFr1   = 6.0;
+  fTFr2   = 0.62;
+  fTFc1   = 0.0087;
+  fTFc2   = 0.07;
 
-  fRAWstoreRaw = storeraw;
 }
+
+