ROOT logo
#include "hshowercalibrater.h"

#include "hruntimedb.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hshowerdetector.h"
#include "hcategory.h"
#include "hmatrixcatiter.h"
#include "hlocation.h"
#include "hshowerraw.h"
#include "hshowercal.h"
#include "hshowercalpar.h"
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "showerdef.h"


ClassImp(HShowerCalibrater)

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////
//HShowerCalibrater
//
// HShowerCalibrater class calculates new value of measured charge from RAW
// level using calibrations parameters from the parameter containers 
// HShowerCalPar. Calculated charge is saved to CAL level.
//
//////////////////////////////////////////////////////////////////////

HShowerCalibrater::HShowerCalibrater(const Text_t *name,const Text_t *title) :
  HReconstructor(name,title)
{
   m_pCalPar = NULL;
   fIter=NULL;
   m_loc.set(4,0,0,0,0);
   m_zeroLoc.set(0);
}

HShowerCalibrater::HShowerCalibrater()
{
  m_pCalPar = NULL;
  m_loc.set(4,0,0,0,0);
  m_zeroLoc.set(0);
  fIter=NULL;
}

void HShowerCalibrater::initCalPar() {
//initializations of calibration parameters
    HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()
                                                  ->getDetector("Shower");
    m_pCalPar = gHades->getRuntimeDb()->getContainer("ShowerCalPar");
    if (m_pCalPar) {
      ((HShowerCalPar*)m_pCalPar)->
             setSetup(pShowerDet->getShowerSectors(),
                      pShowerDet->getShowerModules(),
                      pShowerDet->getRows(),
                      pShowerDet->getColumns());     
    }
}

HShowerCalibrater::~HShowerCalibrater(void) {
//   if (m_pCalPar) delete m_pCalPar;
     if (fIter) delete fIter;
}

Bool_t HShowerCalibrater::init() {
  // creates the ShowerRaw and ShowerCal categories 
  //  and adds them to the current event
  // creates an iterator which loops over all fired cells

    printf("initialization of shower calibrater\n");
    HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()
                                                  ->getDetector("Shower");

    m_pRawCat=gHades->getCurrentEvent()->getCategory(catShowerRaw);
    if (!m_pRawCat) {
      m_pRawCat=pShowerDet->buildCategory(catShowerRaw);

      if (!m_pRawCat) return kFALSE;
      else gHades->getCurrentEvent()
                         ->addCategory(catShowerRaw, m_pRawCat, "Shower");
    }

    m_pCalCat=gHades->getCurrentEvent()->getCategory(catShowerCal);
    if (!m_pCalCat) {
      m_pCalCat=pShowerDet->buildCategory(catShowerCal);

      if (!m_pCalCat) return kFALSE;
      else gHades->getCurrentEvent()
                        ->addCategory(catShowerCal, m_pCalCat, "Shower");
    }

    initCalPar();
    fIter=(HIterator*)m_pRawCat->MakeIterator("native");

    return kTRUE;
}

Bool_t HShowerCalibrater::reinit() {
/*
    HRuntimeDb* rtdb=gHades->getRuntimeDb();

    HShowerCalAsic *pCalAsic = (HShowerCalAsic*)rtdb->
                                               getContainer("ShowerCalAsic");

    HShowerLookupAsic *pLookupAsic = (HShowerLookupAsic*)rtdb->
                                               getContainer("ShowerLookupAsic");


    if (pCalAsic && pLookupAsic) {
       ((HShowerCalPar*)getCalPar())->setAsicTables(pLookupAsic, pCalAsic);
       ((HShowerCalPar*)getCalPar())->takeDataFromAsic();
    }
*/

    return kTRUE;
}


void HShowerCalibrater::setCalPar(HParSet *pCalPar) {
    if (m_pCalPar) delete m_pCalPar;

    m_pCalPar = pCalPar;
}

Bool_t HShowerCalibrater::finalize(void) {
   return kTRUE;
}

HShowerCalibrater& HShowerCalibrater::operator=(HShowerCalibrater &c) {

  return c;
}

Int_t HShowerCalibrater::execute()
{
 // calibrates all fired cells

  HShowerRaw *pRaw;

  fIter->Reset();
  while((pRaw = (HShowerRaw *)fIter->Next()))
  {
    //loop on all fired pads
    //if (pRaw->getEventType()!=1) break;  //calibrates only event type 1

    m_loc[0]=pRaw->getSector();
    m_loc[1]=pRaw->getModule();
    m_loc[2]=pRaw->getRow();
    m_loc[3]= pRaw->getCol();

    calibrate(pRaw);  
  }

  return 0;
}

Bool_t HShowerCalibrater::calibrate(HShowerRaw *raw) {
//calibrates the pad using slope and offset from parameter container 
#if DEBUG_LEVEL>2
  gDebuger->enterFunc("HShowerCalibrater::execute");
  gDebuger->message("Raw cat points to %p",raw);
#endif
  HShowerCal *cal=NULL;
  HShowerCalParCell *calparcell=NULL;

  //pointer for calibration parameters container for pad in m_loc position
  calparcell = (HShowerCalParCell*) ((HShowerCalPar*)getCalPar())
                                         ->getObject(m_loc);

  if (raw) {
    Float_t fCharge;
	
    if( (raw->getCharge())  >  ((-1.0)*(calparcell->getThreshold())) ){
       fCharge = (raw->getCharge() + calparcell->getOffset()) 
					* calparcell->getSlope() * calparcell->getGain();
    }
	else{ 
		fCharge = -1.0; 
	}
	
    //cout << "raw->getCharge() " <<raw->getCharge()  << endl;
    //cout << "calparcell->getOffset()" << calparcell->getOffset() << endl;
    //cout << "calparcell->getThreshold()" << calparcell->getThreshold() << endl;
    //cout << "calparcell->getSlope()" <<calparcell->getSlope()  << endl;
    //cout << "calparcell->getGain()" << calparcell->getGain() << endl;
	
		
    if (fCharge > 0.0) {  // remove noise
       cal=(HShowerCal *)m_pCalCat->getNewSlot(m_zeroLoc);

       if (cal!=NULL) {
         cal=new(cal) HShowerCal;  //new element of ShowerCal category
         cal->setCharge(fCharge);
         cal->setSector(raw->getSector());
         cal->setModule(raw->getModule());
         cal->setRow(raw->getRow());
         cal->setCol(raw->getCol());
       }
    } 
  }
#if DEBUG_LEVEL>2
  gDebuger->leaveFunc("HShowerCalibrater::execute");
#endif
  return kTRUE;
}


 hshowercalibrater.cc:1
 hshowercalibrater.cc:2
 hshowercalibrater.cc:3
 hshowercalibrater.cc:4
 hshowercalibrater.cc:5
 hshowercalibrater.cc:6
 hshowercalibrater.cc:7
 hshowercalibrater.cc:8
 hshowercalibrater.cc:9
 hshowercalibrater.cc:10
 hshowercalibrater.cc:11
 hshowercalibrater.cc:12
 hshowercalibrater.cc:13
 hshowercalibrater.cc:14
 hshowercalibrater.cc:15
 hshowercalibrater.cc:16
 hshowercalibrater.cc:17
 hshowercalibrater.cc:18
 hshowercalibrater.cc:19
 hshowercalibrater.cc:20
 hshowercalibrater.cc:21
 hshowercalibrater.cc:22
 hshowercalibrater.cc:23
 hshowercalibrater.cc:24
 hshowercalibrater.cc:25
 hshowercalibrater.cc:26
 hshowercalibrater.cc:27
 hshowercalibrater.cc:28
 hshowercalibrater.cc:29
 hshowercalibrater.cc:30
 hshowercalibrater.cc:31
 hshowercalibrater.cc:32
 hshowercalibrater.cc:33
 hshowercalibrater.cc:34
 hshowercalibrater.cc:35
 hshowercalibrater.cc:36
 hshowercalibrater.cc:37
 hshowercalibrater.cc:38
 hshowercalibrater.cc:39
 hshowercalibrater.cc:40
 hshowercalibrater.cc:41
 hshowercalibrater.cc:42
 hshowercalibrater.cc:43
 hshowercalibrater.cc:44
 hshowercalibrater.cc:45
 hshowercalibrater.cc:46
 hshowercalibrater.cc:47
 hshowercalibrater.cc:48
 hshowercalibrater.cc:49
 hshowercalibrater.cc:50
 hshowercalibrater.cc:51
 hshowercalibrater.cc:52
 hshowercalibrater.cc:53
 hshowercalibrater.cc:54
 hshowercalibrater.cc:55
 hshowercalibrater.cc:56
 hshowercalibrater.cc:57
 hshowercalibrater.cc:58
 hshowercalibrater.cc:59
 hshowercalibrater.cc:60
 hshowercalibrater.cc:61
 hshowercalibrater.cc:62
 hshowercalibrater.cc:63
 hshowercalibrater.cc:64
 hshowercalibrater.cc:65
 hshowercalibrater.cc:66
 hshowercalibrater.cc:67
 hshowercalibrater.cc:68
 hshowercalibrater.cc:69
 hshowercalibrater.cc:70
 hshowercalibrater.cc:71
 hshowercalibrater.cc:72
 hshowercalibrater.cc:73
 hshowercalibrater.cc:74
 hshowercalibrater.cc:75
 hshowercalibrater.cc:76
 hshowercalibrater.cc:77
 hshowercalibrater.cc:78
 hshowercalibrater.cc:79
 hshowercalibrater.cc:80
 hshowercalibrater.cc:81
 hshowercalibrater.cc:82
 hshowercalibrater.cc:83
 hshowercalibrater.cc:84
 hshowercalibrater.cc:85
 hshowercalibrater.cc:86
 hshowercalibrater.cc:87
 hshowercalibrater.cc:88
 hshowercalibrater.cc:89
 hshowercalibrater.cc:90
 hshowercalibrater.cc:91
 hshowercalibrater.cc:92
 hshowercalibrater.cc:93
 hshowercalibrater.cc:94
 hshowercalibrater.cc:95
 hshowercalibrater.cc:96
 hshowercalibrater.cc:97
 hshowercalibrater.cc:98
 hshowercalibrater.cc:99
 hshowercalibrater.cc:100
 hshowercalibrater.cc:101
 hshowercalibrater.cc:102
 hshowercalibrater.cc:103
 hshowercalibrater.cc:104
 hshowercalibrater.cc:105
 hshowercalibrater.cc:106
 hshowercalibrater.cc:107
 hshowercalibrater.cc:108
 hshowercalibrater.cc:109
 hshowercalibrater.cc:110
 hshowercalibrater.cc:111
 hshowercalibrater.cc:112
 hshowercalibrater.cc:113
 hshowercalibrater.cc:114
 hshowercalibrater.cc:115
 hshowercalibrater.cc:116
 hshowercalibrater.cc:117
 hshowercalibrater.cc:118
 hshowercalibrater.cc:119
 hshowercalibrater.cc:120
 hshowercalibrater.cc:121
 hshowercalibrater.cc:122
 hshowercalibrater.cc:123
 hshowercalibrater.cc:124
 hshowercalibrater.cc:125
 hshowercalibrater.cc:126
 hshowercalibrater.cc:127
 hshowercalibrater.cc:128
 hshowercalibrater.cc:129
 hshowercalibrater.cc:130
 hshowercalibrater.cc:131
 hshowercalibrater.cc:132
 hshowercalibrater.cc:133
 hshowercalibrater.cc:134
 hshowercalibrater.cc:135
 hshowercalibrater.cc:136
 hshowercalibrater.cc:137
 hshowercalibrater.cc:138
 hshowercalibrater.cc:139
 hshowercalibrater.cc:140
 hshowercalibrater.cc:141
 hshowercalibrater.cc:142
 hshowercalibrater.cc:143
 hshowercalibrater.cc:144
 hshowercalibrater.cc:145
 hshowercalibrater.cc:146
 hshowercalibrater.cc:147
 hshowercalibrater.cc:148
 hshowercalibrater.cc:149
 hshowercalibrater.cc:150
 hshowercalibrater.cc:151
 hshowercalibrater.cc:152
 hshowercalibrater.cc:153
 hshowercalibrater.cc:154
 hshowercalibrater.cc:155
 hshowercalibrater.cc:156
 hshowercalibrater.cc:157
 hshowercalibrater.cc:158
 hshowercalibrater.cc:159
 hshowercalibrater.cc:160
 hshowercalibrater.cc:161
 hshowercalibrater.cc:162
 hshowercalibrater.cc:163
 hshowercalibrater.cc:164
 hshowercalibrater.cc:165
 hshowercalibrater.cc:166
 hshowercalibrater.cc:167
 hshowercalibrater.cc:168
 hshowercalibrater.cc:169
 hshowercalibrater.cc:170
 hshowercalibrater.cc:171
 hshowercalibrater.cc:172
 hshowercalibrater.cc:173
 hshowercalibrater.cc:174
 hshowercalibrater.cc:175
 hshowercalibrater.cc:176
 hshowercalibrater.cc:177
 hshowercalibrater.cc:178
 hshowercalibrater.cc:179
 hshowercalibrater.cc:180
 hshowercalibrater.cc:181
 hshowercalibrater.cc:182
 hshowercalibrater.cc:183
 hshowercalibrater.cc:184
 hshowercalibrater.cc:185
 hshowercalibrater.cc:186
 hshowercalibrater.cc:187
 hshowercalibrater.cc:188
 hshowercalibrater.cc:189
 hshowercalibrater.cc:190
 hshowercalibrater.cc:191
 hshowercalibrater.cc:192
 hshowercalibrater.cc:193
 hshowercalibrater.cc:194
 hshowercalibrater.cc:195
 hshowercalibrater.cc:196
 hshowercalibrater.cc:197
 hshowercalibrater.cc:198
 hshowercalibrater.cc:199
 hshowercalibrater.cc:200
 hshowercalibrater.cc:201
 hshowercalibrater.cc:202
 hshowercalibrater.cc:203
 hshowercalibrater.cc:204
 hshowercalibrater.cc:205
 hshowercalibrater.cc:206
 hshowercalibrater.cc:207
 hshowercalibrater.cc:208
 hshowercalibrater.cc:209
 hshowercalibrater.cc:210