/////////////////////////////////////////////////////////////////////////////// // fill EMC branches of GEANT ROOT tree // // last modified on 26/01/2012 by K.Lapidus /////////////////////////////////////////////////////////////////////////////// #include "fillemc.h" #include "cfortran.h" #include "hgeantemc.h" #include "hgeantmaxtrk.h" #include "hades.h" #include "hlocation.h" #include "hcategory.h" #include "hrecevent.h" #include "hpartialevent.h" #include "hgeantkine.h" struct EMC_DEF { // structure mapped to EMCTUPLE Fortran COMMON block Int_t ntrk; Int_t emctrk[MAXTRKEMC]; Int_t emcdet[MAXTRKEMC]; Float_t emcpe[MAXTRKEMC]; Float_t emcx[MAXTRKEMC]; Float_t emcy[MAXTRKEMC]; Float_t emcz[MAXTRKEMC]; Float_t emctof[MAXTRKEMC]; Float_t emcmom[MAXTRKEMC]; Float_t emclen[MAXTRKEMC]; }; #define EMCTUPLE COMMON_BLOCK(EMCTUPLE,emctuple) COMMON_BLOCK_DEF(EMC_DEF,EMCTUPLE); void fillemc(int* sector) { HLocation loc; HRecEvent* pHGeantEvent = (HRecEvent*)(gHades->getCurrentEvent()); // get pointer to event HPartialEvent* pSimul = pHGeantEvent->getPartialEvent(catSimul); HCategory* pEmcCat = pSimul->getCategory(catEmcGeantRaw); // get category if(*sector == 1) pEmcCat->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(pEmc==NULL) { printf("\n*** FILLEMC: HGeantEmc location not found ! ***\n"); printf("sector=%d trk=%d\n",(*sector-1),trk); return; } pEmc = new(pEmc) HGeantEmc; // EMC track data Int_t track = EMCTUPLE.emctrk[trk]; pEmc->setTrack(track); pEmc->setHit(EMCTUPLE.emcpe[trk],EMCTUPLE.emcx[trk],EMCTUPLE.emcy[trk],EMCTUPLE.emcz[trk], EMCTUPLE.emctof[trk],EMCTUPLE.emcmom[trk],EMCTUPLE.emclen[trk]); pEmc->setAddress((Char_t)(*sector-1),(UChar_t)cell); //special "track" was marked as -777., won't be added if(pKin != NULL && track > 0) { // add hit to linked list of track ((HGeantKine*)pKin->getObject(track-1))->setEmcHitIndex(index); pEmc->sortVariable = EMCTUPLE.emctof[trk]; } } } // wrapping of the c++ routine as Fortran-subroutine using cfortran.h // of Cern-library FCALLSCSUB1(fillemc,FILLEMC,fillemc,PINT)