ROOT logo
//*-- AUTHOR : Jerzy Pietraszko, Ilse Koenig 
//*-- Created : 03/02/2006
// Modified by M.Golubeva 01.11.2006

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
//
//  HWallTrbUnpacker
//
//  Class for unpacking TRB data and filling 
//	the Forward Wall Raw category
//  Base subevent decoding is performed by decode function
//  see: htrbbaseunpacker.h 
//
/////////////////////////////////////////////////////////////

using namespace std;
#include "hwalltrbunpacker.h"
#include "walldef.h"
#include "htrblookup.h"
#include "hwallraw.h"
//#include "hwallrefhitpar.h"
#include "hdebug.h"
#include "hades.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hruntimedb.h"
#include "hcategory.h"
#include "hldsubevt.h"
#include "heventheader.h"
#include <iostream>
#include <iomanip>
#include <stdlib.h>

ClassImp (HWallTrbUnpacker)

HWallTrbUnpacker::HWallTrbUnpacker (UInt_t id):HTrbBaseUnpacker (id) {
    // constructor
    pRawCat = NULL;
    debugWallFlag=0;
    doRefTimeCorr=0;
    noTimeRefCorr=false;
}

Bool_t HWallTrbUnpacker::init (void) {

    // creates the raw category and gets the pointer to the lookup table
    pRawCat = gHades->getCurrentEvent ()->getCategory (catWallRaw);
    if (!pRawCat) {
	pRawCat = gHades->getSetup ()->getDetector ("Wall")->buildCategory (catWallRaw);
	if (!pRawCat)
	    return kFALSE;
	gHades->getCurrentEvent ()->addCategory (catWallRaw, pRawCat, "Wall");
    }
    loc.set (1, 0);
    lookup = (HTrbLookup *) (gHades->getRuntimeDb ()->getContainer ("TrbLookup"));
    if (!lookup) return kFALSE;

    return kTRUE;
}


Int_t HWallTrbUnpacker::execute (void)
{

    HWallRaw *pRaw = 0;	// pointer to Raw category

    if (gHades->isCalibration ()) {
	//calibration event
	return 1;
    }//if (gHades->isCalibration ())

    // decode subevent data
    if (pSubEvt) {  // pSubEvt - make sure that there is something for decoding

	// decode the subevent and fill arrays, see: htrbbaseunpacker.h
	if(!decode()) return(-1);

	if(!noTimeRefCorr){
	    switch(trbDataVer){
	    case 0:// old
	    case 2:// Wall/Veto
		// RPC style
		correctRefTimeCh31();
		break;
	    case 3:
		// new scheme for high rates
		correctRefTimeCh127();
		break;
		//         case 4:
		// W.K. electronics
		//            correctRefTimeWKStyle();
		//            break;
	    default:
		// do nothing
		break;
	    }
	}

	// get the part of the lookup table which belongs to the subevent ID
	// in order to check which TRBchannel belongs to the WallDetector

	///////////////////////////////
	//
	//  Be Carefull !! I am changing SubEvent ID
	//  Should not be a case !! Only for tests
	//  My test HLD data are with SubEventId = 545
	//  In Hydra Allowed SubEvents Ids for TRB starts from 800...
	//
	//////////////////////////////


	HTrbLookupBoard *board = lookup->getBoard (subEvtId);
	if (!board) {
	    // Problem: unpacker for specific SubId was called but for this SubId
	    // no channel in lookup table axist.
	    //
	    Warning ("execute", "SubEvent: %i unpacked but channel in Lookup table does not exist", subEvtId);
	}//if (!board)

	//fill RAW category for Forward Wall detector
	for (Int_t i = 0; i < 128; i++) {
	    if (trbLeadingMult[i] < 1) continue; //Leading Time data for this channel exist
	    // fill wall raw category
	    HTrbLookupChan *chan = board->getChannel (i);
	    if (chan && 'W' == (Char_t) (chan->getDetector ())) {	//Channel belongs to Wall det
		loc[0] = (Int_t)chan->getCell();
		pRaw = (HWallRaw *) pRawCat->getObject (loc);

		if (!pRaw) {
		    pRaw = (HWallRaw *) pRawCat->getSlot (loc);
		    if (pRaw) {
			pRaw = new (pRaw) HWallRaw;
			pRaw->setCell ((Int_t) chan->getCell ());
			for(Int_t chmult=0; chmult< trbLeadingMult[i]; chmult++){
			    pRaw->fill( trbLeadingTime[i][chmult], trbADC[i][chmult]);
			}
		    }//if (pRaw)
		    else {
			Error ("execute()", "Can't get slot");
			cerr << "Can't get slot: Cell " <<(Int_t)chan->getCell() << endl;
			return -1;
		    }
		}//if (!pRaw)
		else {
		    Error ("execute()", "Slot already exists! This should not happen with TRB board data.");
		    cerr << "Slot already exists: Cell " <<(Int_t)chan->getCell() << endl;
		}

		// fill time info for channel: mod, fiber
		// btw: HHodoRaw will care itself if there are more hits and
		// handle this cases correctly by itself --- B.S.
		// todo: convert invalid time from unpacker -> invalid time in hodo class ... all negative are invalid?


	    }//if (chan && 'W' == (Char_t) (chan->getDetector ()))
	}// for(Int_t i=0; i<128; i++)

    }//if(pSubEvt)

    return 1;

}
 hwalltrbunpacker.cc:1
 hwalltrbunpacker.cc:2
 hwalltrbunpacker.cc:3
 hwalltrbunpacker.cc:4
 hwalltrbunpacker.cc:5
 hwalltrbunpacker.cc:6
 hwalltrbunpacker.cc:7
 hwalltrbunpacker.cc:8
 hwalltrbunpacker.cc:9
 hwalltrbunpacker.cc:10
 hwalltrbunpacker.cc:11
 hwalltrbunpacker.cc:12
 hwalltrbunpacker.cc:13
 hwalltrbunpacker.cc:14
 hwalltrbunpacker.cc:15
 hwalltrbunpacker.cc:16
 hwalltrbunpacker.cc:17
 hwalltrbunpacker.cc:18
 hwalltrbunpacker.cc:19
 hwalltrbunpacker.cc:20
 hwalltrbunpacker.cc:21
 hwalltrbunpacker.cc:22
 hwalltrbunpacker.cc:23
 hwalltrbunpacker.cc:24
 hwalltrbunpacker.cc:25
 hwalltrbunpacker.cc:26
 hwalltrbunpacker.cc:27
 hwalltrbunpacker.cc:28
 hwalltrbunpacker.cc:29
 hwalltrbunpacker.cc:30
 hwalltrbunpacker.cc:31
 hwalltrbunpacker.cc:32
 hwalltrbunpacker.cc:33
 hwalltrbunpacker.cc:34
 hwalltrbunpacker.cc:35
 hwalltrbunpacker.cc:36
 hwalltrbunpacker.cc:37
 hwalltrbunpacker.cc:38
 hwalltrbunpacker.cc:39
 hwalltrbunpacker.cc:40
 hwalltrbunpacker.cc:41
 hwalltrbunpacker.cc:42
 hwalltrbunpacker.cc:43
 hwalltrbunpacker.cc:44
 hwalltrbunpacker.cc:45
 hwalltrbunpacker.cc:46
 hwalltrbunpacker.cc:47
 hwalltrbunpacker.cc:48
 hwalltrbunpacker.cc:49
 hwalltrbunpacker.cc:50
 hwalltrbunpacker.cc:51
 hwalltrbunpacker.cc:52
 hwalltrbunpacker.cc:53
 hwalltrbunpacker.cc:54
 hwalltrbunpacker.cc:55
 hwalltrbunpacker.cc:56
 hwalltrbunpacker.cc:57
 hwalltrbunpacker.cc:58
 hwalltrbunpacker.cc:59
 hwalltrbunpacker.cc:60
 hwalltrbunpacker.cc:61
 hwalltrbunpacker.cc:62
 hwalltrbunpacker.cc:63
 hwalltrbunpacker.cc:64
 hwalltrbunpacker.cc:65
 hwalltrbunpacker.cc:66
 hwalltrbunpacker.cc:67
 hwalltrbunpacker.cc:68
 hwalltrbunpacker.cc:69
 hwalltrbunpacker.cc:70
 hwalltrbunpacker.cc:71
 hwalltrbunpacker.cc:72
 hwalltrbunpacker.cc:73
 hwalltrbunpacker.cc:74
 hwalltrbunpacker.cc:75
 hwalltrbunpacker.cc:76
 hwalltrbunpacker.cc:77
 hwalltrbunpacker.cc:78
 hwalltrbunpacker.cc:79
 hwalltrbunpacker.cc:80
 hwalltrbunpacker.cc:81
 hwalltrbunpacker.cc:82
 hwalltrbunpacker.cc:83
 hwalltrbunpacker.cc:84
 hwalltrbunpacker.cc:85
 hwalltrbunpacker.cc:86
 hwalltrbunpacker.cc:87
 hwalltrbunpacker.cc:88
 hwalltrbunpacker.cc:89
 hwalltrbunpacker.cc:90
 hwalltrbunpacker.cc:91
 hwalltrbunpacker.cc:92
 hwalltrbunpacker.cc:93
 hwalltrbunpacker.cc:94
 hwalltrbunpacker.cc:95
 hwalltrbunpacker.cc:96
 hwalltrbunpacker.cc:97
 hwalltrbunpacker.cc:98
 hwalltrbunpacker.cc:99
 hwalltrbunpacker.cc:100
 hwalltrbunpacker.cc:101
 hwalltrbunpacker.cc:102
 hwalltrbunpacker.cc:103
 hwalltrbunpacker.cc:104
 hwalltrbunpacker.cc:105
 hwalltrbunpacker.cc:106
 hwalltrbunpacker.cc:107
 hwalltrbunpacker.cc:108
 hwalltrbunpacker.cc:109
 hwalltrbunpacker.cc:110
 hwalltrbunpacker.cc:111
 hwalltrbunpacker.cc:112
 hwalltrbunpacker.cc:113
 hwalltrbunpacker.cc:114
 hwalltrbunpacker.cc:115
 hwalltrbunpacker.cc:116
 hwalltrbunpacker.cc:117
 hwalltrbunpacker.cc:118
 hwalltrbunpacker.cc:119
 hwalltrbunpacker.cc:120
 hwalltrbunpacker.cc:121
 hwalltrbunpacker.cc:122
 hwalltrbunpacker.cc:123
 hwalltrbunpacker.cc:124
 hwalltrbunpacker.cc:125
 hwalltrbunpacker.cc:126
 hwalltrbunpacker.cc:127
 hwalltrbunpacker.cc:128
 hwalltrbunpacker.cc:129
 hwalltrbunpacker.cc:130
 hwalltrbunpacker.cc:131
 hwalltrbunpacker.cc:132
 hwalltrbunpacker.cc:133
 hwalltrbunpacker.cc:134
 hwalltrbunpacker.cc:135
 hwalltrbunpacker.cc:136
 hwalltrbunpacker.cc:137
 hwalltrbunpacker.cc:138
 hwalltrbunpacker.cc:139
 hwalltrbunpacker.cc:140
 hwalltrbunpacker.cc:141
 hwalltrbunpacker.cc:142
 hwalltrbunpacker.cc:143
 hwalltrbunpacker.cc:144
 hwalltrbunpacker.cc:145
 hwalltrbunpacker.cc:146
 hwalltrbunpacker.cc:147
 hwalltrbunpacker.cc:148
 hwalltrbunpacker.cc:149
 hwalltrbunpacker.cc:150
 hwalltrbunpacker.cc:151
 hwalltrbunpacker.cc:152
 hwalltrbunpacker.cc:153
 hwalltrbunpacker.cc:154
 hwalltrbunpacker.cc:155
 hwalltrbunpacker.cc:156
 hwalltrbunpacker.cc:157
 hwalltrbunpacker.cc:158
 hwalltrbunpacker.cc:159
 hwalltrbunpacker.cc:160
 hwalltrbunpacker.cc:161
 hwalltrbunpacker.cc:162
 hwalltrbunpacker.cc:163
 hwalltrbunpacker.cc:164