/////////////////////////////////////////////////////////////////////////////// // fill TOF branches of GEANT ROOT tree // // last modified on: 05/12/2008 by I. Koenig /////////////////////////////////////////////////////////////////////////////// #include "filltof.h" #include "cfortran.h" #include "hgeanttof.h" #include "hgeantmaxtrk.h" #include "hades.h" #include "hlocation.h" #include "hcategory.h" #include "hrecevent.h" #include "hpartialevent.h" #include "hgeantkine.h" struct TOF_DEF { // structure mapped to TOFTUPLE Fortran COMMON block Int_t ntrk; Int_t toftrk[MAXTRKTOF]; Int_t tofdet[MAXTRKTOF]; Float_t tofe[MAXTRKTOF]; Float_t tofx[MAXTRKTOF]; Float_t tofy[MAXTRKTOF]; Float_t toftof[MAXTRKTOF]; Float_t tofmom[MAXTRKTOF]; Float_t toflen[MAXTRKTOF]; }; #define TOFTUPLE COMMON_BLOCK(TOFTUPLE,toftuple) COMMON_BLOCK_DEF(TOF_DEF,TOFTUPLE); void filltof(int* sector) { // printf("\n Inside filltof\n"); HLocation loc; HRecEvent* pHGeantEvent = (HRecEvent*)(gHades->getCurrentEvent()); // get pointer to event HPartialEvent* pSimul = pHGeantEvent->getPartialEvent(catSimul); HCategory* pTofCat = pSimul->getCategory(catTofGeantRaw); // get category if(*sector == 1) pTofCat->Clear(); // clear category if 1st sector HCategory* pKin = pSimul->getCategory(catGeantKine); // get KINE cat Int_t index; for(int trk=0; trkgetSlot(loc,&index); // get slot if(pTof==NULL) { printf("\n*** FILLTOF: HGeantTof location not found ! ***\n"); printf("sector=%d trk=%d\n",(*sector-1),trk); return; } // Int_t index = pTofCat->getIndex(loc); pTof = new(pTof) HGeantTof; // TOF track data Int_t track = TOFTUPLE.toftrk[trk]; pTof->setTrack(track); pTof->setHit(TOFTUPLE.tofe[trk],TOFTUPLE.tofx[trk],TOFTUPLE.tofy[trk], TOFTUPLE.toftof[trk],TOFTUPLE.tofmom[trk],TOFTUPLE.toflen[trk]); pTof->setAddress((Char_t)(*sector-1),(Char_t)module,(Char_t)cell); if(pKin != NULL && track > 0) { // add hit to linked list of track ((HGeantKine*)pKin->getObject(track-1))->setTofHitIndex(index); pTof->sortVariable = TOFTUPLE.toftof[trk]; } } if(pKin != NULL && *sector == 6) { // loop all over all tracks ... Int_t nTracks = pKin->getEntries(); for(Int_t i=0;igetObject(i))->sortTofHits(); // ... and sort hits } } } // wrapping of the c++ routine as Fortran-subroutine using cfortran.h // of Cern-library FCALLSCSUB1(filltof,FILLTOF,filltof,PINT)