ROOT logo
#include "hmdcclfnstack.h"

//*-- AUTHOR : Pechenov Vladimir
//*-- Modified : 06/11/2002 by V.Pechenov

//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////
// HMdcClFnStack
//
// Stack for claster finder
//
////////////////////////////////////////////////////////////////

ClassImp(HMdcClFnStack)
ClassImp(HMdcClFnStacksArr)

HMdcClFnStack::HMdcClFnStack(Int_t size) {
 stack     = NULL;  
 stackEnd  = NULL;
 stackPos  = NULL;
 stackSize = size>20 ? size : 20;
}

void HMdcClFnStack::setSize(Int_t size) {
  if(size > stackSize) stackSize = size;
}

HMdcClFnStack::~HMdcClFnStack() {
  if(stack != NULL) delete [] stack;
  stack = NULL;
}

void HMdcClFnStack::increaseStack(void) {
  if(stack == NULL) create();
  else {
    Int_t *oldStack    = stack;
    Int_t *oldStackPos = stackPos;
    stackSize += stackSize/2;
    stack      = NULL;
    create();
    for(Int_t *n=oldStack; n<oldStackPos; n++) push(*n);
    delete [] oldStack;
    Warning("increaseStack","Stack No.%i New size = %i",indexInArr+1,stackSize);
  }
}

void HMdcClFnStack::create(void) {
  stack    = new Int_t [stackSize+2];
  stackPos = stack;
  stackEnd = stack+stackSize;
}

//===================================================================

HMdcClFnStacksArr::HMdcClFnStacksArr(Int_t size) {
  // Stack sizes:    [0] - for fixed level of cluster finder
  Int_t sizes[24] = {100000,    20,    20,   250, 32000, 74000,  // For one module projection
                       3000,  3000,  3000,  1000,   500,   500,  // For segment projection
                        100,   100,   100,   100,   100,   100,  // For sector projection
                        100,   300,   600,  1500,   900,   800}; //   (4 modules)

  for(Int_t i=0; i<24; i++) {
    stacksArr[i].setIndex(i);
    stacksArr[i].setSize(sizes[i]);
  }
}

void HMdcClFnStacksArr::init(UChar_t maxAmp) {
  amplitude = 0;
  for(Int_t am=0;am<maxAmp;am++) stacksArr[am].init();
}

UChar_t HMdcClFnStacksArr::pop(Int_t& binNum) {
  // return amplitude !!!
  binNum = stacksArr[amplitude].pop();
  if(binNum>=0) return amplitude+1;
  if(amplitude == 0) return 0;
  amplitude--;
  return pop(binNum);
}
 hmdcclfnstack.cc:1
 hmdcclfnstack.cc:2
 hmdcclfnstack.cc:3
 hmdcclfnstack.cc:4
 hmdcclfnstack.cc:5
 hmdcclfnstack.cc:6
 hmdcclfnstack.cc:7
 hmdcclfnstack.cc:8
 hmdcclfnstack.cc:9
 hmdcclfnstack.cc:10
 hmdcclfnstack.cc:11
 hmdcclfnstack.cc:12
 hmdcclfnstack.cc:13
 hmdcclfnstack.cc:14
 hmdcclfnstack.cc:15
 hmdcclfnstack.cc:16
 hmdcclfnstack.cc:17
 hmdcclfnstack.cc:18
 hmdcclfnstack.cc:19
 hmdcclfnstack.cc:20
 hmdcclfnstack.cc:21
 hmdcclfnstack.cc:22
 hmdcclfnstack.cc:23
 hmdcclfnstack.cc:24
 hmdcclfnstack.cc:25
 hmdcclfnstack.cc:26
 hmdcclfnstack.cc:27
 hmdcclfnstack.cc:28
 hmdcclfnstack.cc:29
 hmdcclfnstack.cc:30
 hmdcclfnstack.cc:31
 hmdcclfnstack.cc:32
 hmdcclfnstack.cc:33
 hmdcclfnstack.cc:34
 hmdcclfnstack.cc:35
 hmdcclfnstack.cc:36
 hmdcclfnstack.cc:37
 hmdcclfnstack.cc:38
 hmdcclfnstack.cc:39
 hmdcclfnstack.cc:40
 hmdcclfnstack.cc:41
 hmdcclfnstack.cc:42
 hmdcclfnstack.cc:43
 hmdcclfnstack.cc:44
 hmdcclfnstack.cc:45
 hmdcclfnstack.cc:46
 hmdcclfnstack.cc:47
 hmdcclfnstack.cc:48
 hmdcclfnstack.cc:49
 hmdcclfnstack.cc:50
 hmdcclfnstack.cc:51
 hmdcclfnstack.cc:52
 hmdcclfnstack.cc:53
 hmdcclfnstack.cc:54
 hmdcclfnstack.cc:55
 hmdcclfnstack.cc:56
 hmdcclfnstack.cc:57
 hmdcclfnstack.cc:58
 hmdcclfnstack.cc:59
 hmdcclfnstack.cc:60
 hmdcclfnstack.cc:61
 hmdcclfnstack.cc:62
 hmdcclfnstack.cc:63
 hmdcclfnstack.cc:64
 hmdcclfnstack.cc:65
 hmdcclfnstack.cc:66
 hmdcclfnstack.cc:67
 hmdcclfnstack.cc:68
 hmdcclfnstack.cc:69
 hmdcclfnstack.cc:70
 hmdcclfnstack.cc:71
 hmdcclfnstack.cc:72
 hmdcclfnstack.cc:73
 hmdcclfnstack.cc:74
 hmdcclfnstack.cc:75
 hmdcclfnstack.cc:76
 hmdcclfnstack.cc:77
 hmdcclfnstack.cc:78
 hmdcclfnstack.cc:79
 hmdcclfnstack.cc:80