//*-- AUTHOR : Vladimir Pechenov //*-- Modified : 31.05.2001 by Vladimir Pechenov //_HADES_CLASS_DESCRIPTION /////////////////////////////////////////////////////////////////////////////// // HMdcHitSim // // This class is derived from HMdcHit for simulated events. // Additional data elements are following: // nTracks - the number of tracks in the list of tracks numbers // listTracks[5] - the list of tracks numbers // nTimes[5] - num. of drift times from each track in this hit // (not cells because one cell can have 2 drift times from 2 tracks) // Number of noise wires is kept in nTimes[4] and // if nTimes[4]>0 listTracks[4]=-99 // This information can be accessed via the functions: // Int_t getNTracks(void) // Int_t getTrack(const Int_t n) 0 <= n < getNTracks() // UChar_t getNTimes(const Int_t n) // Int_t getNumNoiseWires(void) // // The list of tracks is sorted. listTracks[0] is a track which have // most number of drift times and etc. // // The list of tracks is calculated after filling of HMdcHit container // via function Int_t calcNTracks(void) which return nTracks. // /////////////////////////////////////////////////////////////////////////////// #include "hmdchitsim.h" #include "hades.h" #include "hmdcdef.h" #include "hmdccal1sim.h" #include "hevent.h" #include "hcategory.h" #include "hmessagemgr.h" #include "TMath.h" ClassImp(HMdcHitSim) void HMdcHitSim::clear() { // reset data members to default values nTracks=0; status=0; HMdcHit::Clear(); for(Int_t i=0;i<5;i++){ listTracks[i]=0; nTimes[i] =0; } } void HMdcHitSim::setNumNoiseWires(Int_t n) { // setting number of noise wires if(n<=0) return; if(nTracks>4) nTracks=4; listTracks[4]=-99; nTimes[4]=n; } void HMdcHitSim::setNTracks(Int_t nTr,const Int_t* listTr,const UChar_t* nTm) { // copies nTr track numbers from array listTr to // internal list of tracks array. if(nTr<=0) nTracks=-1; else { Int_t maxTr = (nTr<6) ? nTr:5; nTracks = 0; for(Int_t n=0; ngetCurrentEvent()->getCategory(catMdcCal1); if(!fCalCat) return -1; HLocation loc; loc.set(4,sector,module,0,0); Int_t tmpListTracks[48]; Int_t nTimesTot=0; for(Int_t layer=0; layer<6; layer++) { Int_t nCells=getNCells(layer); if(nCells==0) continue; loc[2]=layer; for(Int_t n=0; ngetObject(loc); if(fCal1Sim) { if(nCTimes&1) tmpListTracks[nTimesTot++]=fCal1Sim->getNTrack1(); if(nCTimes&2) tmpListTracks[nTimesTot++]=fCal1Sim->getNTrack2(); } else Error("calcNTracks","Zero pointer received!"); } } Short_t counter[48]; listTracks[4]=-99; // [4] - for noise wires nTimes[4]=0; // ... for(Int_t n=0; ngetEmbeddingRealTrackId()) { nTimes[4]++; // noise wires continue; } else if(tmpListTracks[n]>0 || tmpListTracks[n]==gHades->getEmbeddingRealTrackId()) { tmpListTracks[nTracks]=tmpListTracks[n]; counter[nTracks]=1; for(Int_t m=n+1; m0) { Int_t index[nTracks]; if(nTracks>1) TMath::Sort(nTracks,counter,index); else index[0]=0; //Fill output: if(nTracks>4) nTracks=(nTimes[4]==0) ? 5:4; for(Int_t n=0; ngetMsg()->info(10,HMessageMgr::DET_MDC,GetName() ,"Sec.%i Mod.%i chi2=%g, %i tracks: ", sector,module,chi2,nTracks); for(Int_t n=0; ngetMsg()->info(10,HMessageMgr::DET_MDC,GetName() ,"%i(%i) ",listTracks[n],nTimes[n]); if(listTracks[4]==-99 && nTimes[4]>0) gHades->getMsg()->info(10, HMessageMgr::DET_MDC,GetName()," noise_wires(%i) ",nTimes[4]); INFO_msg(10,HMessageMgr::DET_MDC,"[trNum(nOfTimes)]"); HMdcHit::print(); }