ROOT logo
//*-- AUTHOR : R. Holzmann
//*-- Modified : 31/03/2004 by 

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////////////
//
//  HGeantFilter
//
//  Reconstructor to filter the simulated event data produced by HGeant
//  rescaling the multiplcity of particle id by acc.
//
//  This is done by throwing a rundom number for each occurance of a particle
//  id in the kine branch and deleting all associated hits from all categories
//  of type hgeantxxx.
//  The kine branch entries are not removed however, just set 'inactive'.
//
///////////////////////////////////////////////////////////////////////////////

#include "hgeantfilter.h"
#include "hades.h"
#include "hgeantkine.h"
#include "hlinkeddataobject.h"
#include "hgeantmdc.h"
#include "hgeanttof.h"
#include "hgeantshower.h"
#include "hgeantrich.h"

ClassImp(HGeantFilter)

//////////////////////////////////////////////////////////////////////////////////////////////
//
//  This filter class does the actual filtering of HGeant hits that are to be suppressed
//  from the categories
//
HHitFilter::HHitFilter(HCategory* pCat) {
  pKineCat = pCat;
}

HHitFilter::~HHitFilter() {}

Bool_t HHitFilter::check(TObject* obj) {
// check if hit was made by a suppressed track

  Int_t track = ((HLinkedDataObject*)obj)->getTrack();             // get track number
  HGeantKine* pKine = (HGeantKine*)(pKineCat->getObject(track-1)); // get corresponding kine object
  return(!pKine->isSuppressed());
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(HGeantFilter)

HGeantFilter::HGeantFilter(Text_t *name,Text_t *title, Int_t id, Float_t acc)
                           : HReconstructor(name,title) {
  particleId = id;
  accepted = acc; 

  catKine = NULL;
  catMdc = NULL;
  catTof = NULL;
  catShower = NULL;
  catRichPhoton = NULL;
  catRichDirect = NULL;
  catRichMirror = NULL;

 }
/*
// old code ... made copy contructor private
 HGeantFilter::HGeantFilter(HGeantFilter &filter) {
  // copy constructor not implemented!
  Error("HGeantFilter","Copy constructor not defined");
}
*/
HGeantFilter::~HGeantFilter(void) {
 }

Bool_t HGeantFilter::init(void) {
  //
  // Set up pointers to the Geant cats and their iterators
  //
  HEvent* ev = (HEvent*)(gHades->getCurrentEvent());
  if (!ev) return kFALSE;
  if ((catKine = ev->getCategory(catGeantKine)) == NULL) return kFALSE;

  catMdc = ev->getCategory(catMdcGeantRaw);
  catTof = ev->getCategory(catTofGeantRaw);
  catShower = ev->getCategory(catShowerGeantRaw);
  catRichPhoton = ev->getCategory(catRichGeantRaw);
  catRichDirect = ev->getCategory(catRichGeantRaw+1);
  catRichMirror = ev->getCategory(catRichGeantRaw+2);

  return kTRUE;
}

Int_t HGeantFilter::execute(void) {
  // 
  // Do the filtering for each hit category
  // 
  HGeantKine::suppressTracks(particleId,accepted,(HLinearCategory*)catKine);

  HHitFilter filt;
  filt.setKine(catKine);

  if (catMdc) catMdc->filter(filt);
  if (catTof) catTof->filter(filt);
  if (catShower) catShower->filter(filt);
  if (catRichPhoton) catRichPhoton->filter(filt);
  if (catRichDirect) catRichDirect->filter(filt);
  if (catRichMirror) catRichMirror->filter(filt);

  return 0;
}

Bool_t HGeantFilter::reinit(void) {

  return kTRUE;
}

Bool_t HGeantFilter::finalize(void) {

  return kTRUE;
}

 hgeantfilter.cc:1
 hgeantfilter.cc:2
 hgeantfilter.cc:3
 hgeantfilter.cc:4
 hgeantfilter.cc:5
 hgeantfilter.cc:6
 hgeantfilter.cc:7
 hgeantfilter.cc:8
 hgeantfilter.cc:9
 hgeantfilter.cc:10
 hgeantfilter.cc:11
 hgeantfilter.cc:12
 hgeantfilter.cc:13
 hgeantfilter.cc:14
 hgeantfilter.cc:15
 hgeantfilter.cc:16
 hgeantfilter.cc:17
 hgeantfilter.cc:18
 hgeantfilter.cc:19
 hgeantfilter.cc:20
 hgeantfilter.cc:21
 hgeantfilter.cc:22
 hgeantfilter.cc:23
 hgeantfilter.cc:24
 hgeantfilter.cc:25
 hgeantfilter.cc:26
 hgeantfilter.cc:27
 hgeantfilter.cc:28
 hgeantfilter.cc:29
 hgeantfilter.cc:30
 hgeantfilter.cc:31
 hgeantfilter.cc:32
 hgeantfilter.cc:33
 hgeantfilter.cc:34
 hgeantfilter.cc:35
 hgeantfilter.cc:36
 hgeantfilter.cc:37
 hgeantfilter.cc:38
 hgeantfilter.cc:39
 hgeantfilter.cc:40
 hgeantfilter.cc:41
 hgeantfilter.cc:42
 hgeantfilter.cc:43
 hgeantfilter.cc:44
 hgeantfilter.cc:45
 hgeantfilter.cc:46
 hgeantfilter.cc:47
 hgeantfilter.cc:48
 hgeantfilter.cc:49
 hgeantfilter.cc:50
 hgeantfilter.cc:51
 hgeantfilter.cc:52
 hgeantfilter.cc:53
 hgeantfilter.cc:54
 hgeantfilter.cc:55
 hgeantfilter.cc:56
 hgeantfilter.cc:57
 hgeantfilter.cc:58
 hgeantfilter.cc:59
 hgeantfilter.cc:60
 hgeantfilter.cc:61
 hgeantfilter.cc:62
 hgeantfilter.cc:63
 hgeantfilter.cc:64
 hgeantfilter.cc:65
 hgeantfilter.cc:66
 hgeantfilter.cc:67
 hgeantfilter.cc:68
 hgeantfilter.cc:69
 hgeantfilter.cc:70
 hgeantfilter.cc:71
 hgeantfilter.cc:72
 hgeantfilter.cc:73
 hgeantfilter.cc:74
 hgeantfilter.cc:75
 hgeantfilter.cc:76
 hgeantfilter.cc:77
 hgeantfilter.cc:78
 hgeantfilter.cc:79
 hgeantfilter.cc:80
 hgeantfilter.cc:81
 hgeantfilter.cc:82
 hgeantfilter.cc:83
 hgeantfilter.cc:84
 hgeantfilter.cc:85
 hgeantfilter.cc:86
 hgeantfilter.cc:87
 hgeantfilter.cc:88
 hgeantfilter.cc:89
 hgeantfilter.cc:90
 hgeantfilter.cc:91
 hgeantfilter.cc:92
 hgeantfilter.cc:93
 hgeantfilter.cc:94
 hgeantfilter.cc:95
 hgeantfilter.cc:96
 hgeantfilter.cc:97
 hgeantfilter.cc:98
 hgeantfilter.cc:99
 hgeantfilter.cc:100
 hgeantfilter.cc:101
 hgeantfilter.cc:102
 hgeantfilter.cc:103
 hgeantfilter.cc:104
 hgeantfilter.cc:105
 hgeantfilter.cc:106
 hgeantfilter.cc:107
 hgeantfilter.cc:108
 hgeantfilter.cc:109
 hgeantfilter.cc:110
 hgeantfilter.cc:111
 hgeantfilter.cc:112
 hgeantfilter.cc:113
 hgeantfilter.cc:114
 hgeantfilter.cc:115
 hgeantfilter.cc:116
 hgeantfilter.cc:117
 hgeantfilter.cc:118
 hgeantfilter.cc:119
 hgeantfilter.cc:120
 hgeantfilter.cc:121
 hgeantfilter.cc:122
 hgeantfilter.cc:123