using namespace std;
#include "hcalclocation.h"
#include "hades.h"
#include "hevent.h"
#include "hcategory.h"
#include "hlocation.h"
#include "hdataobject.h"
#include "hiterator.h"
#include "htofraw.h"
#include "htofhit.h"
#include "hshowerraw.h"
#include "hshowercal.h"
#include "hshowerhit.h"
#include "hrichraw.h"
#include "hrichcal.h"
#include "hrichhit.h"
#include "hmdccal1.h"
#include "hmdccal2.h"
#include "hmdchit.h"
#include "hdetset.h"
#include <iostream>
#include <iomanip>
ClassImp(HCalcLocation)
TList* HCalcLocation::transform(Int_t acat, TList *pList, Bool_t kill) {
if(!pList) return 0;
if(!gHades) {
if(kill) { pList->Delete(); delete pList; pList = 0; }
return 0;
}
if(!gHades->getCurrentEvent()) {
if(kill) { pList->Delete(); delete pList; pList = 0; }
return 0;
}
HCategory *pCateg = gHades->getCurrentEvent()->getCategory(acat);
if(!pCateg) {
if(kill) { pList->Delete(); delete pList; pList = 0;}
return 0;
}
HLocation *pLoc = 0;
HLocation *pOutLoc = 0;
HIterator *pIt = 0;
TIterator *pIter = 0;
TObject *pDataObj = 0;
TList *pOutList = new TList();
if(!pOutList) {
if(kill) { pList->Delete(); delete pList; pList = 0; }
return 0;
}
Int_t dim1 = -1;
Int_t dim2 = -1;
Int_t dim3 = -1;
Int_t dim4 = -1;
Bool_t kFound = kFALSE;
if(!pIt) pIt = (HIterator*) pCateg->MakeIterator();
pIt->Reset();
while((pDataObj = pIt->Next()) != NULL) {
kFound = kFALSE;
if(!pIter) pIter = (TIterator*) pList->MakeIterator();
pIter->Reset();
while((pLoc = (HLocation*) pIter->Next()) != NULL) {
switch(acat) {
case 96:
dim1 = (Int_t) (((HTofRaw*) pDataObj) -> getSector());
dim2 = (Int_t) (((HTofRaw*) pDataObj) -> getModule());
dim3 = (Int_t) (((HTofRaw*) pDataObj) -> getCell());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 97:
dim1 = (Int_t) (((HTofHit*) pDataObj) -> getSector());
dim2 = (Int_t) (((HTofHit*) pDataObj) -> getModule());
dim3 = (Int_t) (((HTofHit*) pDataObj) -> getCell());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 64:
dim1 = (Int_t) (((HShowerRaw*) pDataObj) -> getSector());
dim2 = (Int_t) (((HShowerRaw*) pDataObj) -> getModule());
dim3 = (Int_t) (((HShowerRaw*) pDataObj) -> getRow());
dim4 = (Int_t) (((HShowerRaw*) pDataObj) -> getCol());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2) && dim4==pLoc->getIndex(3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 66:
dim1 = (Int_t) (((HShowerCal*) pDataObj) -> getSector());
dim2 = (Int_t) (((HShowerCal*) pDataObj) -> getModule());
dim3 = (Int_t) (((HShowerCal*) pDataObj) -> getRow());
dim4 = (Int_t) (((HShowerCal*) pDataObj) -> getCol());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2) && dim4==pLoc->getIndex(3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 65:
dim1 = (Int_t) (((HShowerHit*) pDataObj) -> getSector());
dim2 = (Int_t) (((HShowerHit*) pDataObj) -> getModule());
dim3 = (Int_t) (((HShowerHit*) pDataObj) -> getRow());
dim4 = (Int_t) (((HShowerHit*) pDataObj) -> getCol());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2) && dim4==pLoc->getIndex(3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 32:
dim1 = (Int_t) (((HRichRaw*) pDataObj) -> getSector());
dim2 = (Int_t) (((HRichRaw*) pDataObj) -> getRow());
dim3 = (Int_t) (((HRichRaw*) pDataObj) -> getCol());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 34:
dim1 = (Int_t) (((HRichCal*) pDataObj) -> getSector());
dim2 = (Int_t) (((HRichCal*) pDataObj) -> getRow());
dim3 = (Int_t) (((HRichCal*) pDataObj) -> getCol());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 33:
dim1 = (Int_t) (((HRichHit*) pDataObj) -> getSector());
if(dim1==pLoc->getIndex(0)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 2:
dim1 = (Int_t) (((HMdcCal1*) pDataObj) -> getSector());
dim2 = (Int_t) (((HMdcCal1*) pDataObj) -> getModule());
dim3 = (Int_t) (((HMdcCal1*) pDataObj) -> getLayer());
dim4 = (Int_t) (((HMdcCal1*) pDataObj) -> getCell());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2) && dim4==pLoc->getIndex(3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 4:
dim1 = (Int_t) (((HMdcCal2*) pDataObj) -> getSector());
dim2 = (Int_t) (((HMdcCal2*) pDataObj) -> getModule());
dim3 = (Int_t) (((HMdcCal2*) pDataObj) -> getLayer());
dim4 = (Int_t) (((HMdcCal2*) pDataObj) -> getCell());
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1) &&
dim3==pLoc->getIndex(2) && dim4==pLoc->getIndex(3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
case 1:
((HMdcHit*) pDataObj) -> getSecMod(dim1, dim2);
if(dim1==pLoc->getIndex(0) && dim2==pLoc->getIndex(1)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
kFound = kTRUE;
}
break;
default:
break;
}
if(kFound) break;
}
}
if(pIt) { delete pIt; pIt = 0; }
if(pIter) { delete pIter; pIter = 0; }
if(kill) { pList->Delete(); delete pList; pList = 0; }
return pOutList;
}
TList* HCalcLocation::calcLocList(HDetSet *pSet) {
if(!pSet) return 0;
HLocation *pLoc = 0;
Int_t *pIdx = new Int_t[4];
if(!pIdx) return 0;
Int_t n = 0;
TList *pList = new TList();
if(!pList) return 0;
if(pSet->isMulti()) {
}
else {
pLoc = new HLocation();
if(!pLoc) {
delete [] pIdx;
pIdx = 0;
return 0;
}
n = (pSet->getSingleAddress()).fN;
pLoc->set(n);
for(Int_t i=0; i<n; i++)
pLoc->operator [] (i) = (pSet->getSingleAddress()).operator [] (i);
pList->Add(pLoc);
}
delete [] pIdx;
pIdx = 0;
return (transform(pSet->getCategory(),pList,kTRUE));
}
void HCalcLocation::calcLoc(HDetSet *pSet) {
if(!pSet) return;
if(!pSet->getOutput()) return;
if(!gHades) return;
if(!gHades->getCurrentEvent()) return;
Int_t acat = pSet->getCategory();
HCategory *pCateg = gHades->getCurrentEvent()->getCategory(acat);
if(!pCateg) return;
TList *pOutList = pSet->getOutput()->getList();
if(!pOutList) return;
HLocation *pOutLoc = 0;
HIterator *pIt = 0;
TObject *pDataObj = 0;
Int_t dim1 = -1;
Int_t dim2 = -1;
Int_t dim3 = -1;
Int_t dim4 = -1;
if(!pIt) pIt = (HIterator*) pCateg->MakeIterator();
pIt->Reset();
while((pDataObj = pIt->Next()) != NULL) {
switch(acat) {
case 96:
dim1 = (Int_t) (((HTofRaw*) pDataObj) -> getSector());
dim2 = (Int_t) (((HTofRaw*) pDataObj) -> getModule());
dim3 = (Int_t) (((HTofRaw*) pDataObj) -> getCell());
if(pSet->belongs(dim1,dim2,dim3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 97:
dim1 = (Int_t) (((HTofHit*) pDataObj) -> getSector());
dim2 = (Int_t) (((HTofHit*) pDataObj) -> getModule());
dim3 = (Int_t) (((HTofHit*) pDataObj) -> getCell());
if(pSet->belongs(dim1,dim2,dim3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 64:
dim1 = (Int_t) (((HShowerRaw*) pDataObj) -> getSector());
dim2 = (Int_t) (((HShowerRaw*) pDataObj) -> getModule());
dim3 = (Int_t) (((HShowerRaw*) pDataObj) -> getRow());
dim4 = (Int_t) (((HShowerRaw*) pDataObj) -> getCol());
if(pSet->belongs(dim1,dim2,dim3,dim4)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 66:
dim1 = (Int_t) (((HShowerCal*) pDataObj) -> getSector());
dim2 = (Int_t) (((HShowerCal*) pDataObj) -> getModule());
dim3 = (Int_t) (((HShowerCal*) pDataObj) -> getRow());
dim4 = (Int_t) (((HShowerCal*) pDataObj) -> getCol());
if(pSet->belongs(dim1,dim2,dim3,dim4)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 65:
dim1 = (Int_t) (((HShowerHit*) pDataObj) -> getSector());
dim2 = (Int_t) (((HShowerHit*) pDataObj) -> getModule());
dim3 = (Int_t) (((HShowerHit*) pDataObj) -> getRow());
dim4 = (Int_t) (((HShowerHit*) pDataObj) -> getCol());
if(pSet->belongs(dim1,dim2,dim3,dim4)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 32:
dim1 = (Int_t) (((HRichRaw*) pDataObj) -> getSector());
dim2 = (Int_t) (((HRichRaw*) pDataObj) -> getRow());
dim3 = (Int_t) (((HRichRaw*) pDataObj) -> getCol());
if(pSet->belongs(dim1,dim2,dim3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 34:
dim1 = (Int_t) (((HRichCal*) pDataObj) -> getSector());
dim2 = (Int_t) (((HRichCal*) pDataObj) -> getRow());
dim3 = (Int_t) (((HRichCal*) pDataObj) -> getCol());
if(pSet->belongs(dim1,dim2,dim3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 33:
dim1 = (Int_t) (((HRichHit*) pDataObj) -> getSector());
if(pSet->belongs(dim1)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 2:
dim1 = (Int_t) (((HMdcCal1*) pDataObj) -> getSector());
dim2 = (Int_t) (((HMdcCal1*) pDataObj) -> getModule());
dim3 = (Int_t) (((HMdcCal1*) pDataObj) -> getLayer());
dim4 = (Int_t) (((HMdcCal1*) pDataObj) -> getCell());
if(pSet->belongs(dim1,dim2,dim3)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 4:
dim1 = (Int_t) (((HMdcCal2*) pDataObj) -> getSector());
dim2 = (Int_t) (((HMdcCal2*) pDataObj) -> getModule());
dim3 = (Int_t) (((HMdcCal2*) pDataObj) -> getLayer());
dim4 = (Int_t) (((HMdcCal2*) pDataObj) -> getCell());
if(pSet->belongs(dim1,dim2,dim3,dim4)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
case 1:
((HMdcHit*) pDataObj) -> getSecMod(dim1, dim2);
if(pSet->belongs(dim1,dim2)) {
pOutLoc = new HLocation();
if(!pOutLoc) break;
(*pOutLoc) = pIt->getLocation();
pOutList->Add(pOutLoc);
}
break;
default:
break;
}
}
if(pIt) { delete pIt; pIt = 0; }
}
Last change: Sat May 22 12:53:45 2010
Last generated: 2010-05-22 12:53
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.