]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDfeeParam.cxx
re-activate contrib code
[u/mrichter/AliRoot.git] / TRD / AliTRDfeeParam.cxx
index ffcf834398972c61e499135a5af3c2b408ffb05c..d5e90a7eb0d25c6bab3ae91e7b097d408d5b5da0 100644 (file)
@@ -30,6 +30,9 @@
 //  Author:                                                               //
 //    Ken Oyama (oyama@physi.uni-heidelberg.de)                           //
 //                                                                        //
+//  many things now configured by AliTRDtrapConfig reflecting             //
+//  the real memory structure of the TRAP (Jochen)                        //
+//                                                                        //
 ////////////////////////////////////////////////////////////////////////////
 
 //#include <TMath.h>
@@ -44,7 +47,7 @@ ClassImp(AliTRDfeeParam)
 
 AliTRDfeeParam *AliTRDfeeParam::fgInstance   = 0;
 Bool_t          AliTRDfeeParam::fgTerminated = kFALSE;
-Bool_t          AliTRDfeeParam::fgTracklet = kFALSE;
+Bool_t          AliTRDfeeParam::fgTracklet = kTRUE;
 
 //_____________________________________________________________________________
 AliTRDfeeParam* AliTRDfeeParam::Instance()
@@ -85,55 +88,20 @@ void AliTRDfeeParam::Terminate()
 AliTRDfeeParam::AliTRDfeeParam()
   :TObject()
   ,fCP(0)
-  ,fTFnExp(1)
-  ,fTFr1(0)
-  ,fTFr2(0)
-  ,fTFc1(0)
-  ,fTFc2(0)
-  ,fEBsglIndThr(5)
-  ,fEBsumIndThr(5)
-  ,fEBindLUT(0xF0)
-  ,fEBignoreNeighbour(0)
   ,fRAWversion(3)
-  ,fRAWstoreRaw(kTRUE)
 {
   //
   // Default constructor
   //
   
-  // PASA V.4
-  if      (fTFnExp == 1) {
-    fTFr1 = 1.1563;
-    fTFr2 = 0.1299;
-    fTFc1 = 0.0657;
-    fTFc2 = 0.0000;
-  }
-  else if (fTFnExp == 2) {
-    fTFr1 = 1.1563;
-    fTFr2 = 0.1299;
-    fTFc1 = 0.1141;
-    fTFc2 = 0.6241;
-  }
-
   fCP  = AliTRDCommonParam::Instance();
-
 }
 
 //_____________________________________________________________________________
 AliTRDfeeParam::AliTRDfeeParam(TRootIoCtor *)
   :TObject()
   ,fCP(0)
-  ,fTFnExp(1)
-  ,fTFr1(0)
-  ,fTFr2(0)
-  ,fTFc1(0)
-  ,fTFc2(0)
-  ,fEBsglIndThr(0)
-  ,fEBsumIndThr(0)
-  ,fEBindLUT(0)
-  ,fEBignoreNeighbour(0)
   ,fRAWversion(0)
-  ,fRAWstoreRaw(0)
 {
   //
   // IO constructor
@@ -145,17 +113,7 @@ AliTRDfeeParam::AliTRDfeeParam(TRootIoCtor *)
 AliTRDfeeParam::AliTRDfeeParam(const AliTRDfeeParam &p)
   :TObject(p)
   ,fCP(p.fCP)
-  ,fTFnExp(p.fTFnExp)
-  ,fTFr1(p.fTFr1)
-  ,fTFr2(p.fTFr2)
-  ,fTFc1(p.fTFc1)
-  ,fTFc2(p.fTFc2)
-  ,fEBsglIndThr(p.fEBsglIndThr)
-  ,fEBsumIndThr(p.fEBsumIndThr)
-  ,fEBindLUT(p.fEBindLUT)
-  ,fEBignoreNeighbour (p.fEBignoreNeighbour)
   ,fRAWversion(p.fRAWversion)
-  ,fRAWstoreRaw(p.fRAWstoreRaw)
 {
   //
   // AliTRDfeeParam copy constructor
@@ -195,17 +153,7 @@ void AliTRDfeeParam::Copy(TObject &p) const
   //
 
   ((AliTRDfeeParam &) p).fCP          = fCP;
-  ((AliTRDfeeParam &) p).fTFnExp      = fTFnExp;
-  ((AliTRDfeeParam &) p).fTFr1        = fTFr1;
-  ((AliTRDfeeParam &) p).fTFr2        = fTFr2;
-  ((AliTRDfeeParam &) p).fTFc1        = fTFc1;
-  ((AliTRDfeeParam &) p).fTFc2        = fTFc2;
-  ((AliTRDfeeParam &) p).fEBsglIndThr = fEBsglIndThr;
-  ((AliTRDfeeParam &) p).fEBsumIndThr = fEBsumIndThr;
-  ((AliTRDfeeParam &) p).fEBindLUT    = fEBindLUT;
-  ((AliTRDfeeParam &) p).fEBignoreNeighbour = fEBignoreNeighbour;
   ((AliTRDfeeParam &) p).fRAWversion  = fRAWversion;
-  ((AliTRDfeeParam &) p).fRAWstoreRaw = fRAWstoreRaw;
   
   TObject::Copy(p);
 
@@ -349,91 +297,126 @@ Int_t AliTRDfeeParam::GetColSide(Int_t icol) const
 
 }
 
-//_____________________________________________________________________________
-//void AliTRDfeeParam::GetFilterParam( Float_t &r1, Float_t &r2, Float_t &c1
-//                                   , Float_t &c2, Float_t &ped ) const
-//{
-  //
-  // Return current filter parameter
-  //
 
-  //  r1            = fR1;
-  //r2            = fR2;
-  //c1            = fC1;
-  //c2            = fC2;
-  //ped           = fPedestal;
-//};
 
-//_____________________________________________________________________________
-void AliTRDfeeParam::SetEBsglIndThr(Int_t val)
+UInt_t AliTRDfeeParam::AliToExtAli(Int_t rob, Int_t aliid)
 {
-  //
-  // Set Event Buffer Sngle Indicator Threshold (EBIS in TRAP conf).
-  // Timebin is indicated if ADC value >= val.
-  //
-
-  if( val >= 0 && val <= 1023 ) { 
-    fEBsglIndThr = val;
-  } else {
-    AliError(Form("EBsglIndThr value %d is out of range, keep previously set value (%d).",
-                 val, fEBsglIndThr));
-  }
+   if(aliid!= 127)
+      return ( (1 << 10) | (rob << 7) | aliid);
 
+   return 127;
 }
 
-//_____________________________________________________________________________
-void AliTRDfeeParam::SetEBsumIndThr(Int_t val)
+
+Int_t AliTRDfeeParam::ExtAliToAli(UInt_t dest, UShort_t linkpair, UShort_t rocType, Int_t *mcmList, Int_t listSize)
 {
-  //
-  // Set Event Buffer Sum Indicator Threshold (EBIT in TRAP conf).
-  // Timebin is indicated if ADC sum value >= val.
-  //
+   // Converts an extended ALICE ID which identifies a single MCM or a group of MCMs to
+   // the corresponding list of MCMs. Only broadcasts (127) are encoded as 127 
+   // The return value is the number of MCMs in the list
 
-  if( val >= 0 && val <= 4095 ) { 
-    fEBsumIndThr = val;
-  } 
-  else {
-    AliError(Form("EBsumIndThr value %d is out of range, keep previously set value (%d).",
-                 val, fEBsumIndThr));
-  }
+  mcmList[0]=-1;
 
+  Short_t nmcm = 0;
+  UInt_t mcm, rob, robAB;
+  UInt_t cmA = 0, cmB = 0;  // Chipmask for each A and B side
+  
+  // Default chipmask for 4 linkpairs (each bit correponds each alice-mcm)
+  static const UInt_t gkChipmaskDefLp[4] = { 0x1FFFF, 0x1FFFF, 0x3FFFF, 0x1FFFF };
+  
+  rob = dest >> 7;                              // Extract ROB pattern from dest.
+  mcm = dest & 0x07F;                           // Extract MCM pattern from dest.
+  robAB = GetRobAB( rob, linkpair ); // Get which ROB sides are selected.
+  
+  // Abort if no ROB is selected
+  if( robAB == 0 ) {
+    return 0;
+  }
+  
+  // Special case
+  if( mcm == 127 ) {
+    if( robAB == 3 ) {      // This is very special 127 can stay only if two ROBs are selected
+      mcmList[0]=127;      // broadcase to ALL
+      mcmList[1]=-1;
+      return 1;
+    }
+    cmA = cmB = 0x3FFFF;
+  } else if( (mcm & 0x40) != 0 ) { // If top bit is 1 but not 127, this is chip group.
+    if( (mcm & 0x01) != 0 )                  { cmA |= 0x04444; cmB |= 0x04444; } // chip_cmrg
+    if( (mcm & 0x02) != 0 )                  { cmA |= 0x10000; cmB |= 0x10000; } // chip_bmrg
+    if( (mcm & 0x04) != 0 && rocType == 0 ) { cmA |= 0x20000; cmB |= 0x20000; } // chip_hm3
+    if( (mcm & 0x08) != 0 && rocType == 1 ) { cmA |= 0x20000; cmB |= 0x20000; } // chip_hm4
+    if( (mcm & 0x10) != 0 )                  { cmA |= 0x01111; cmB |= 0x08888; } // chip_edge
+    if( (mcm & 0x20) != 0 )                  { cmA |= 0x0aaaa; cmB |= 0x03333; } // chip_norm
+  } else { // Otherwise, this is normal chip ID, turn on only one chip.
+    cmA = 1 << mcm;
+    cmB = 1 << mcm;
+  }
+  
+  // Mask non-existing MCMs
+  cmA &= gkChipmaskDefLp[linkpair];
+  cmB &= gkChipmaskDefLp[linkpair];
+  // Remove if only one side is selected
+  if( robAB == 1 ) 
+    cmB = 0;
+  if( robAB == 2 ) 
+    cmA = 0;
+  if( robAB == 4 && linkpair != 2 ) 
+    cmA = cmB = 0; // Restrict to only T3A and T3B
+  
+  // Finally convert chipmask to list of slaves
+  nmcm = ChipmaskToMCMlist( cmA, cmB, linkpair, mcmList, listSize);
+  
+  return nmcm;
 }
 
-//_____________________________________________________________________________
-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 {
-    AliError(Form("EBindLUT value %d is out of range, keep previously set value (%d).",
-                 val, fEBindLUT));
+Short_t AliTRDfeeParam::GetRobAB( UShort_t robsel, UShort_t linkpair )
+{
+  // Converts the ROB part of the extended ALICE ID to robs
+
+  if( (robsel & 0x8) != 0 ) { // 1000 .. direct ROB selection. Only one of the 8 ROBs are used.
+    robsel = robsel & 7;
+    if( (robsel % 2) == 0 && (robsel / 2) == linkpair ) 
+      return 1;  // Even means A side (position 0,2,4,6)
+    if( (robsel % 2) == 1 && (robsel / 2) == linkpair ) 
+      return 2;  // Odd  means B side (position 1,3,5,7)
+    return 0;
   }
-
+  
+  // ROB group
+  if( robsel == 0 ) { return 3; } // Both   ROB
+  if( robsel == 1 ) { return 1; } // A-side ROB
+  if( robsel == 2 ) { return 2; } // B-side ROB
+  if( robsel == 3 ) { return 3; } // Both   ROB
+  if( robsel == 4 ) { return 4; } // Only T3A and T3B
+  // Other number 5 to 7 are ignored (not defined) 
+  
+  return 0;
 }
 
-//_____________________________________________________________________________
-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 {
-    AliError(Form("EBignoreNeighbour value %d is out of range, keep previously set value (%d).",
-                 val, fEBignoreNeighbour));
+Short_t AliTRDfeeParam::ChipmaskToMCMlist( UInt_t cmA, UInt_t cmB, UShort_t linkpair, Int_t *mcmList, Int_t listSize )
+{
+  // Converts the chipmask to a list of MCMs 
+  
+  Short_t nmcm = 0;
+  Short_t i;
+  for( i = 0 ; i < 18 ; i++ ) {  // 18: number of MCMs on a ROB
+     if( (cmA & (1 << i)) != 0 && nmcm<listSize) {
+        mcmList[nmcm] = ((linkpair*2) << 7) | i;
+       ++nmcm;
+    }
+    if( (cmB & (1 << i)) != 0  && nmcm<listSize) {
+       mcmList[nmcm] = ((linkpair*2+1) << 7) | i;
+       ++nmcm;
+    }
   }
+
+  mcmList[nmcm]=-1;
+  return nmcm;
 }
 
+
 //_____________________________________________________________________________
 void AliTRDfeeParam::SetRAWversion( Int_t rawver )
 {
@@ -450,35 +433,3 @@ void AliTRDfeeParam::SetRAWversion( Int_t rawver )
   }
 
 }
-
-//_____________________________________________________________________________
-void AliTRDfeeParam::SetXenon()
-{
-  //
-  // Sets the filter parameters for the Xenon gas mixture
-  //
-
-  fTFnExp = 1;
-  fTFr1   = 1.1563;
-  fTFr2   = 0.1299;
-  fTFc1   = 0.0657;
-  fTFc2   = 0.0000;
-
-}
-
-//_____________________________________________________________________________
-void AliTRDfeeParam::SetArgon()
-{
-  //
-  // Sets the filter parameters for the Argon gas mixture
-  //
-
-  fTFnExp = 2;
-  fTFr1   = 6.0;
-  fTFr2   = 0.62;
-  fTFc1   = 0.0087;
-  fTFc2   = 0.07;
-
-}
-
-