ROOT logo
using namespace std;
#include "TRandom.h"
#include <time.h>
#include <iostream> 
#include <iomanip>
#include "hwallhitf.h" //FK//
#include "hwallhitfsim.h"
#include "walldef.h"   //FK//
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hwalldetector.h" //FK//
#include "hwallraw.h"   //FK// 
#include "hwallrawsim.h"   
#include "hevent.h"
#include "hpartialevent.h"
#include "hcategory.h"
#include "hmatrixcategory.h"
#include "hrecevent.h"
#include "hlocation.h"
#include "hwallcalpar.h" //FK//
#include "hwalldigipar.h"
#include "hwallhit.h"   //FK//
#include "hwallhitsim.h"  
#include "hstartdef.h"
#include "hstart2hit.h"
#include "hwallgeompar.h"        //FK//
#include "hdetgeompar.h"         //FK//
#include "hgeomvector.h"         //FK//
#include "hspecgeompar.h"        //FK//
#include "hgeomvolume.h"           //FK//
#include "hgeomcompositevolume.h"  //FK//
#include "hgeomtransform.h"        //FK//

//*-- Created : 24/06/2000 by M.Golubeva
//*-- Modified : 27/04/2001 by T.Wojcik
//*-- Modified: 11/8/2005 by F. Krizek
// Modified by M.Golubeva 01.11.2006
//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////////////
//
//  HWallHitf calibrates raw Wall data and puts output
//  values into cal data category
//
/////////////////////////////////////////////////////////////////////

void HWallHitFSim::initParContainer() {

    pWallDigiPar  = (HWallDigiPar *)gHades->getRuntimeDb()->getContainer("WallDigiPar");
    pWallGeometry = (HWallGeomPar *)gHades->getRuntimeDb()->getContainer("WallGeomPar");
    pSpecGeometry = (HSpecGeomPar *)gHades->getRuntimeDb()->getContainer("SpecGeomPar");
}

HWallHitFSim::HWallHitFSim(void) {

    fHitCat       = NULL;
    fRawCat       = NULL;
    pWallDigiPar  = NULL;
    pWallGeometry = NULL;
    fLoc.set(1,-1);
    iter          = NULL;

}

HWallHitFSim::HWallHitFSim(const Text_t *name,const Text_t *title) :
HWallHitF(name,title) {

    fHitCat       = NULL;
    fRawCat       = NULL;
    pWallDigiPar  = NULL;
    pWallGeometry = NULL;
    pSpecGeometry = NULL;
    fLoc.set(1,-1);
    iter          = NULL;
}

HWallHitFSim::~HWallHitFSim()
{
    if(iter){
	delete iter;
	iter = NULL;
    }
}

void HWallHitFSim::fillHit(HWallHitSim *hit, HWallRawSim *raw)
{

}

void HWallHitFSim::fillHitTrack(HWallHitSim *hit, HWallRawSim *raw)
{
    HWallHitSim *hs = (HWallHitSim *)hit;
    HWallRawSim *rs = (HWallRawSim *)raw;
    hs->setNTrack1(rs->getNTrack1());
    hs->setNTrack2(rs->getNTrack2());
}

Bool_t HWallHitFSim::init(void) {

    initParContainer();

    fRawCat = gHades->getCurrentEvent()->getCategory(catWallRaw);
    if (!fRawCat) {
	HWallDetector* wall = (HWallDetector*)(gHades->getSetup()->getDetector("Wall"));
	fRawCat = wall->buildMatrixCategory("HWallRawSim",0.5F);
	if (!fRawCat) return kFALSE;
	else gHades->getCurrentEvent()->addCategory(catWallRaw,fRawCat,"Wall");
    } else {
	if (fRawCat->getClass() != HWallRawSim::Class()) {
	    Error("HWallHitFSim::init()","Misconfigured input category");
	    return kFALSE;
	}
    }
    iter = (HIterator*)fRawCat->MakeIterator();  // cannot be "native", because
    // iter->getLocation() is used

    fHitCat = gHades->getCurrentEvent()->getCategory(catWallHit);
    if (!fHitCat) {
	HWallDetector* wall = (HWallDetector*)(gHades->getSetup()->getDetector("Wall"));
	fHitCat = wall->buildMatrixCategory("HWallHitSim",0.5F);
	if (!fHitCat) return kFALSE;
	else gHades->getCurrentEvent()->addCategory(catWallHit,fHitCat,"Wall");
    } else {
	if (fHitCat->getClass() != HWallHitSim::Class()) {
	    Error("HWallHitfSim::init()","Misconfigured output category");
	    return kFALSE;
	}
    }


    // Get Start Hit category. If StartHit is not defined
    // a Warning is displayed and fStartHitCat is set to 0

    fStartHitCat = gHades->getCurrentEvent()->getCategory(catStart2Hit);
    if (!fStartHitCat) Warning("init","Start Hit level not defining: setting start time to 0");

    return kTRUE;
}

void HWallHitFSim::fillGeometry(HWallHitSim *hit) {
    // Fills in the LAB position parameters for the given HTofHit.
    //
    // This is done by transforming the point (x,0,0) in the ROD coordinate
    // system to the LAB coordinate system. Where x is the reconstructed
    // x position inside the hit.

    HGeomVector rLocal,r;
    Float_t d,phi,theta,xx,yy,zz;
    Float_t rad2deg = 180./TMath::Pi();

    HModGeomPar *module= pWallGeometry->getModule(0);
    HGeomTransform &trans = module->getLabTransform();

    HGeomVolume *cellVol = module->getRefVolume()->getComponent(hit->getCell());
    HGeomTransform &cellTrans=cellVol->getTransform();

    // Fill r with the hit coordinates in the cell coordinate system
    // Since we do not have information about x,y,z coordinates of impact
    //  hi occures in centre thus z=0, x=0 and y=0.
    //  Note that (0,0,0) corresponds to the rod center.

    r.setX(0.);
    r.setY(0.);
    r.setZ(0.);

    rLocal = cellTrans.transFrom(r);  // transform to module coordinate system
    r      = trans.transFrom(rLocal);     // transform from module to LAB system

    HGeomVolume *tv = pSpecGeometry->getTarget(0);
    if (tv) r      -= tv->getTransform().getTransVector();   // correct for target position

    // Fill output
    d     = r.length();
    theta = (d>0.) ? (rad2deg * TMath::ACos(r.getZ() / d)) : 0.;
    phi   = rad2deg * TMath::ATan2( r.getY(), r.getX());
    if (phi < 0.) phi += 360.;
    if (tv)         r += tv->getTransform().getTransVector();   // correct for target position

    hit->setXYZLab(r.getX(), r.getY(), r.getZ());
    hit->setDistance( d );
    hit->setTheta(theta);
    hit->setPhi(phi);
    hit->getXYZLab(xx,yy,zz);

}


Int_t HWallHitFSim::execute(void) {

    HWallRawSim* raw = NULL;
    HWallHitSim* hit = NULL;
    Float_t calTime = 0, adc = 0;
    Int_t cell=-1;
    fLoc.set(1,-1);




    //------------------------------------------------------------------------
    // getting start time (some work must be done for embedding,
    // at the moment the geant tracks will get wrong subtraction!)
    //Float_t startTime         = 0.0;  // unused                                        pStartH->getTime()
    Float_t startTimeSmearing = 0.0;  // for simulation/embedding of sim tracks  pStartH->getResolution()
                                      // startTime  = startTimeSmearing  for simulation
                                      // startTime != startTimeSmearing  for embedding
                                      // startTimeSmearing == -1000      for real data
    if (fStartHitCat && fStartHitCat->getEntries()>0 ) {
	HStart2Hit* pStartH = 0;
	if((pStartH = (HStart2Hit *) fStartHitCat->getObject(0)) != NULL) {
	    //startTime = pStartH->getTime(); // unused 
            if(pStartH->getResolution() != -1000) startTimeSmearing = pStartH->getResolution();
	}
    }
    //------------------------------------------------------------------------

    Float_t startTimeLocal=startTimeSmearing;

    iter->Reset();   // this works only in split mode=2
    // (for 0 and 1 the iterator must be recreated)
    while ((raw=(HWallRawSim *)iter->Next())!=0) {

	fLoc[0] =  raw->getCell();
	if(fLoc[0] == -1) continue;

	if(raw->getTime() > 0.) {
	    fLoc[0] = raw->getCell();
	    cell=fLoc[0];

	    calTime =  pWallDigiPar->getTDC_Slope(cell)*raw->getTime()-pWallDigiPar->getTDC_Offset(cell);
	    calTime -=  startTimeLocal;

	    adc = 1.8*(raw->getCharge())/256.;
	    hit = (HWallHitSim*) fHitCat->getSlot(fLoc);
	    if(hit != NULL) {
		hit = new(hit) HWallHitSim;
		hit->setTime(calTime);
		hit->setCharge(adc);
		hit->setAddress(fLoc[0]);
		fillHit(hit,raw);
		fillGeometry(hit);
		fillHitTrack(hit,raw);
	    }
	}

    }
    return 0;

}


ClassImp(HWallHitFSim)










 hwallhitfsim.cc:1
 hwallhitfsim.cc:2
 hwallhitfsim.cc:3
 hwallhitfsim.cc:4
 hwallhitfsim.cc:5
 hwallhitfsim.cc:6
 hwallhitfsim.cc:7
 hwallhitfsim.cc:8
 hwallhitfsim.cc:9
 hwallhitfsim.cc:10
 hwallhitfsim.cc:11
 hwallhitfsim.cc:12
 hwallhitfsim.cc:13
 hwallhitfsim.cc:14
 hwallhitfsim.cc:15
 hwallhitfsim.cc:16
 hwallhitfsim.cc:17
 hwallhitfsim.cc:18
 hwallhitfsim.cc:19
 hwallhitfsim.cc:20
 hwallhitfsim.cc:21
 hwallhitfsim.cc:22
 hwallhitfsim.cc:23
 hwallhitfsim.cc:24
 hwallhitfsim.cc:25
 hwallhitfsim.cc:26
 hwallhitfsim.cc:27
 hwallhitfsim.cc:28
 hwallhitfsim.cc:29
 hwallhitfsim.cc:30
 hwallhitfsim.cc:31
 hwallhitfsim.cc:32
 hwallhitfsim.cc:33
 hwallhitfsim.cc:34
 hwallhitfsim.cc:35
 hwallhitfsim.cc:36
 hwallhitfsim.cc:37
 hwallhitfsim.cc:38
 hwallhitfsim.cc:39
 hwallhitfsim.cc:40
 hwallhitfsim.cc:41
 hwallhitfsim.cc:42
 hwallhitfsim.cc:43
 hwallhitfsim.cc:44
 hwallhitfsim.cc:45
 hwallhitfsim.cc:46
 hwallhitfsim.cc:47
 hwallhitfsim.cc:48
 hwallhitfsim.cc:49
 hwallhitfsim.cc:50
 hwallhitfsim.cc:51
 hwallhitfsim.cc:52
 hwallhitfsim.cc:53
 hwallhitfsim.cc:54
 hwallhitfsim.cc:55
 hwallhitfsim.cc:56
 hwallhitfsim.cc:57
 hwallhitfsim.cc:58
 hwallhitfsim.cc:59
 hwallhitfsim.cc:60
 hwallhitfsim.cc:61
 hwallhitfsim.cc:62
 hwallhitfsim.cc:63
 hwallhitfsim.cc:64
 hwallhitfsim.cc:65
 hwallhitfsim.cc:66
 hwallhitfsim.cc:67
 hwallhitfsim.cc:68
 hwallhitfsim.cc:69
 hwallhitfsim.cc:70
 hwallhitfsim.cc:71
 hwallhitfsim.cc:72
 hwallhitfsim.cc:73
 hwallhitfsim.cc:74
 hwallhitfsim.cc:75
 hwallhitfsim.cc:76
 hwallhitfsim.cc:77
 hwallhitfsim.cc:78
 hwallhitfsim.cc:79
 hwallhitfsim.cc:80
 hwallhitfsim.cc:81
 hwallhitfsim.cc:82
 hwallhitfsim.cc:83
 hwallhitfsim.cc:84
 hwallhitfsim.cc:85
 hwallhitfsim.cc:86
 hwallhitfsim.cc:87
 hwallhitfsim.cc:88
 hwallhitfsim.cc:89
 hwallhitfsim.cc:90
 hwallhitfsim.cc:91
 hwallhitfsim.cc:92
 hwallhitfsim.cc:93
 hwallhitfsim.cc:94
 hwallhitfsim.cc:95
 hwallhitfsim.cc:96
 hwallhitfsim.cc:97
 hwallhitfsim.cc:98
 hwallhitfsim.cc:99
 hwallhitfsim.cc:100
 hwallhitfsim.cc:101
 hwallhitfsim.cc:102
 hwallhitfsim.cc:103
 hwallhitfsim.cc:104
 hwallhitfsim.cc:105
 hwallhitfsim.cc:106
 hwallhitfsim.cc:107
 hwallhitfsim.cc:108
 hwallhitfsim.cc:109
 hwallhitfsim.cc:110
 hwallhitfsim.cc:111
 hwallhitfsim.cc:112
 hwallhitfsim.cc:113
 hwallhitfsim.cc:114
 hwallhitfsim.cc:115
 hwallhitfsim.cc:116
 hwallhitfsim.cc:117
 hwallhitfsim.cc:118
 hwallhitfsim.cc:119
 hwallhitfsim.cc:120
 hwallhitfsim.cc:121
 hwallhitfsim.cc:122
 hwallhitfsim.cc:123
 hwallhitfsim.cc:124
 hwallhitfsim.cc:125
 hwallhitfsim.cc:126
 hwallhitfsim.cc:127
 hwallhitfsim.cc:128
 hwallhitfsim.cc:129
 hwallhitfsim.cc:130
 hwallhitfsim.cc:131
 hwallhitfsim.cc:132
 hwallhitfsim.cc:133
 hwallhitfsim.cc:134
 hwallhitfsim.cc:135
 hwallhitfsim.cc:136
 hwallhitfsim.cc:137
 hwallhitfsim.cc:138
 hwallhitfsim.cc:139
 hwallhitfsim.cc:140
 hwallhitfsim.cc:141
 hwallhitfsim.cc:142
 hwallhitfsim.cc:143
 hwallhitfsim.cc:144
 hwallhitfsim.cc:145
 hwallhitfsim.cc:146
 hwallhitfsim.cc:147
 hwallhitfsim.cc:148
 hwallhitfsim.cc:149
 hwallhitfsim.cc:150
 hwallhitfsim.cc:151
 hwallhitfsim.cc:152
 hwallhitfsim.cc:153
 hwallhitfsim.cc:154
 hwallhitfsim.cc:155
 hwallhitfsim.cc:156
 hwallhitfsim.cc:157
 hwallhitfsim.cc:158
 hwallhitfsim.cc:159
 hwallhitfsim.cc:160
 hwallhitfsim.cc:161
 hwallhitfsim.cc:162
 hwallhitfsim.cc:163
 hwallhitfsim.cc:164
 hwallhitfsim.cc:165
 hwallhitfsim.cc:166
 hwallhitfsim.cc:167
 hwallhitfsim.cc:168
 hwallhitfsim.cc:169
 hwallhitfsim.cc:170
 hwallhitfsim.cc:171
 hwallhitfsim.cc:172
 hwallhitfsim.cc:173
 hwallhitfsim.cc:174
 hwallhitfsim.cc:175
 hwallhitfsim.cc:176
 hwallhitfsim.cc:177
 hwallhitfsim.cc:178
 hwallhitfsim.cc:179
 hwallhitfsim.cc:180
 hwallhitfsim.cc:181
 hwallhitfsim.cc:182
 hwallhitfsim.cc:183
 hwallhitfsim.cc:184
 hwallhitfsim.cc:185
 hwallhitfsim.cc:186
 hwallhitfsim.cc:187
 hwallhitfsim.cc:188
 hwallhitfsim.cc:189
 hwallhitfsim.cc:190
 hwallhitfsim.cc:191
 hwallhitfsim.cc:192
 hwallhitfsim.cc:193
 hwallhitfsim.cc:194
 hwallhitfsim.cc:195
 hwallhitfsim.cc:196
 hwallhitfsim.cc:197
 hwallhitfsim.cc:198
 hwallhitfsim.cc:199
 hwallhitfsim.cc:200
 hwallhitfsim.cc:201
 hwallhitfsim.cc:202
 hwallhitfsim.cc:203
 hwallhitfsim.cc:204
 hwallhitfsim.cc:205
 hwallhitfsim.cc:206
 hwallhitfsim.cc:207
 hwallhitfsim.cc:208
 hwallhitfsim.cc:209
 hwallhitfsim.cc:210
 hwallhitfsim.cc:211
 hwallhitfsim.cc:212
 hwallhitfsim.cc:213
 hwallhitfsim.cc:214
 hwallhitfsim.cc:215
 hwallhitfsim.cc:216
 hwallhitfsim.cc:217
 hwallhitfsim.cc:218
 hwallhitfsim.cc:219
 hwallhitfsim.cc:220
 hwallhitfsim.cc:221
 hwallhitfsim.cc:222
 hwallhitfsim.cc:223
 hwallhitfsim.cc:224
 hwallhitfsim.cc:225
 hwallhitfsim.cc:226
 hwallhitfsim.cc:227
 hwallhitfsim.cc:228
 hwallhitfsim.cc:229
 hwallhitfsim.cc:230
 hwallhitfsim.cc:231
 hwallhitfsim.cc:232
 hwallhitfsim.cc:233
 hwallhitfsim.cc:234
 hwallhitfsim.cc:235
 hwallhitfsim.cc:236
 hwallhitfsim.cc:237
 hwallhitfsim.cc:238
 hwallhitfsim.cc:239
 hwallhitfsim.cc:240
 hwallhitfsim.cc:241
 hwallhitfsim.cc:242
 hwallhitfsim.cc:243
 hwallhitfsim.cc:244
 hwallhitfsim.cc:245
 hwallhitfsim.cc:246
 hwallhitfsim.cc:247
 hwallhitfsim.cc:248
 hwallhitfsim.cc:249
 hwallhitfsim.cc:250
 hwallhitfsim.cc:251
 hwallhitfsim.cc:252
 hwallhitfsim.cc:253
 hwallhitfsim.cc:254
 hwallhitfsim.cc:255
 hwallhitfsim.cc:256
 hwallhitfsim.cc:257
 hwallhitfsim.cc:258
 hwallhitfsim.cc:259
 hwallhitfsim.cc:260
 hwallhitfsim.cc:261
 hwallhitfsim.cc:262
 hwallhitfsim.cc:263
 hwallhitfsim.cc:264