ROOT logo
#include "hshowerdigitizer.h"
#include "hiterator.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hshowerdetector.h"
#include "hcategory.h"
#include "hlinearcatiter.h"
#include "hlocation.h"
#include "hdebug.h"
#include "hades.h"
#include "showerdef.h"
#include "hshowercal.h"
#include "hshowercopy.h"

//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////////////
//
//  HShowerDigitizer digitizes data, puts output values into
//  HShowerRawMatr data category. The input data are read from the HGeantShower
//  category. The Shower digitization is split into several tasks as shown
//  in the flow diagram below.
//
//   ----------------------
//  |     HShowerUnpacker  |                                                                              //
//  |   (embedding mode)   | \                                                                            //
//  |                      |  \      ------------------                                                   //
//   ----------------------   |     |  HGeantShower    |                                                  //
//                            |      ------------------\                                                  //
//                            |                         \                                                 //
//                            |      ------------------  \------------->  ----------------------          //
//                            |     |  HGeantWire      |   <------------ |  HShowerHitDigitizer |         //
//                            |      ------------------\                  ----------------------          //
//                            |                         \                                                 //
//                 -------------     ------------------  \------------->  -----------------------         //
//             -- | HShowerRaw  |   |  HShowerRawMatr  |   <------------ |  HShowerPadDigitizer  |        //
//            |    -------------     ------------------\                 |( creates track objects|        //
//            |                                         \                |  for real tracks in   |        //
//   ----------------------          ------------------  \               |  embedding mode too)  |        //
//  |   HShowerCalibrater  |        |  HShowerTrack    |  \<------------  -----------------------         //
//  |   (embedding mode)   |         ------------------\   \                                              //
//   ----------------------                             \   \             -----------------------         //
//            |                      ------------------  \   ----------> |   HShowerCopy         |        //
//             -------------------> |  HShowerCal      |  \<------------ |(add charge of real hit|        //
//                                   ------------------\   \             | in embedding too )    |        //
//                                                      \   \             -----------------------         //
//                                   ------------------  ----\--------->  -----------------------         //
//                                  |  HShowerHitHdr   |   <--\--------- |  HShowerHitFinder     |        //
//                                   ------------------        \          -----------------------         //
//                                   ------------------         \        |                                //
//                                  |  HShowerPID      |   <-----\-------|                                //
//                                   ------------------           \      |                                //
//                                   ------------------            \     |                                //
//                                  |  HShowerHit      |   <--------\----|                                //
//                                   ------------------ <            \                                    //
//                                                       \            \                                   //
//                                                        \-------------> ------------------------        //
//                                                                       | HShowerHitTrackMatcher |       //
//                                                                        ------------------------        //
//
//
//  In the case of TRACK EMBEDDING of simulated tracks into
//  experimental data the real data are written by the HShowerUnpacker into
//  HShowerRaw category. The real hits are taken into
//  account by the digitizer (adding of charges). The embedding mode is recognized
//  automatically by analyzing the
//  gHades->getEmbeddingMode() flag.
//            Mode ==0 means no embedding
//                 ==1 realistic embedding (first real or sim hit makes the game)
//                 ==2 keep GEANT tracks   (as 1, but GEANT track numbers will always
//                     win against real data. besides the tracknumber the output will
//                     be the same as in 1)
//
/////////////////////////////////////////////////////////////////////

ClassImp(HShowerCopy)

HShowerCopy::HShowerCopy(const Text_t *name,const Text_t *title, Float_t masterOffset) :
  HReconstructor(name,title)
{
  m_zeroLoc.set(0); 
  m_nEvents = 0;
  fIter = NULL;
  fCalIter = NULL;
  mOffset = masterOffset;
}

HShowerCopy::HShowerCopy()
{
  m_zeroLoc.set(0); 
  m_nEvents = 0;
  fIter = NULL;
  fCalIter = NULL;
  mOffset = 0;
}


HShowerCopy::~HShowerCopy(void) {
    if (fIter)    { delete fIter   ; fIter    = NULL;}
    if (fCalIter) { delete fCalIter; fCalIter = NULL;}
}


Bool_t HShowerCopy::init() {
  printf("initialization shower copy reconstructor\n");
  HCategory *pCatMatr;
  HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()
                                                  ->getDetector("Shower");
  pCatMatr=gHades->getCurrentEvent()->getCategory(catShowerRawMatr);
  
  if (!pCatMatr) {
    pCatMatr=pShowerDet->buildCategory(catShowerRawMatr);

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

  setInCat(pCatMatr);
  fIter = (HIterator*)pCatMatr->MakeIterator("native");

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

    if (!pCatMatr) return kFALSE;
    else gHades->getCurrentEvent()->addCategory(catShowerCal,pCatMatr,"Shower");
  }
  setOutCat(pCatMatr);
  fCalIter = (HIterator*)pCatMatr->MakeIterator("native");

  return kTRUE;
}

/**************    COPY     **************/

Bool_t HShowerCopy::copy(HShowerRawMatr *pMatr)
{

    HShowerCal *pCal = NULL;
    if (pMatr) 
	{

	Float_t fCharge;

	fCharge = pMatr->getCharge();

	if (fCharge >= mOffset)
	{
	    Bool_t found=kFALSE;
	    if(gHades->getEmbeddingMode()>0)
	    {
		//-------------------------------------------------
		// loop over ShowerCal category and check
		// if the object was existing in real data.
                // if so, just add charge to the existing object

		fCalIter->Reset();
		while ((pCal=(HShowerCal *)fCalIter->Next())!=0)
		{
		    if(pCal->getAddress()==pMatr->getAddress())
		    {
			// if the object exists already just
			// add the charges
			pCal->setCharge(pCal->getCharge() + fCharge);
			found=kTRUE;
			break;
		    }
		}
		//-------------------------------------------------
	    }

	    if(!found)
	    {
		// if cal object did not exist before (always true
		// if not in embedding mode)
		pCal=(HShowerCal *)m_pOutCat->getNewSlot(m_zeroLoc);

		if (pCal != NULL){

		    pCal=new(pCal) HShowerCal;
		    pCal->setCharge( fCharge );
		    pCal->setSector( pMatr->getSector() );
		    pCal->setModule( pMatr->getModule() );
		    pCal->setRow( pMatr->getRow() );
		    pCal->setCol( pMatr->getCol() );
		}
	    }
	}
    }
    return kTRUE;

}



Int_t HShowerCopy::execute()
{
  HShowerRawMatr *pMatr;

  if(gHades->getEmbeddingMode()>0 && gHades->getEmbeddingDebug()==1) gHades->getCurrentEvent()->getCategory(catShowerCal)->Clear();


  Int_t n = 0;

  fIter->Reset();
  while((pMatr = (HShowerRawMatr*)fIter->Next()))
  {
    copy(pMatr);
    n++;
  }

  m_nEvents++;       

  return 0;
}


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