/////////////////////////////////////////////////////////////////////////////// // // /////////////////////////////////////////////////////////////////////////////// #include "Stntuple/alg/TStntuple.hh" #include "Stntuple/mod/InitStntupleDataBlocks.hh" #include "Stntuple/obj/TStnTrack.hh" #include "Stntuple/obj/TStnTrackBlock.hh" #include "Stntuple/obj/TStnEvent.hh" #include "Stntuple/mod/StntupleTrackFilter.hh" ClassImp(StntupleTrackFilter) //_____________________________________________________________________________ StntupleTrackFilter::StntupleTrackFilter() { } //_____________________________________________________________________________ StntupleTrackFilter::StntupleTrackFilter(const char* Name, TModule* Module): StntupleFilter(Name,Module) { //----------------------------------------------------------------------------- // introduce cuts //----------------------------------------------------------------------------- TObjArray* cuts; //----------------------------------------------------------------------------- // object-level cuts //----------------------------------------------------------------------------- cuts = fListOfObjectCuts; cuts->Add(new StntupleCut("trkPt" ,Module, 0, 0.,1e5, 200,0,200)); cuts->Add(new StntupleCut("trkEta" ,Module, 1,-1e5,1e5, 200,-5,5)); cuts->Add(new StntupleCut("trkZ0" ,Module, 2,-1e5,1e5, 200,-200,200)); cuts->Add(new StntupleCut("trkD0" ,Module, 3,-1e5,1e5, 200, -10, 10)); cuts->Add(new StntupleCut("trkNas" ,Module, 4, 0., 10, 10, 0,10)); cuts->Add(new StntupleCut("trkNss" ,Module, 5, 0., 10, 10, 0,10)); cuts->Add(new StntupleCut("trkIso" ,Module, 6, 0.,1e5, 100, 0,5)); cuts->Add(new StntupleCut("trkChi2Cot" ,Module, 7, 0.,1e5, 100, 0,10.)); //----------------------------------------------------------------------------- // event-level cuts //----------------------------------------------------------------------------- cuts = fListOfEventCuts; cuts->Add(new StntupleCut("trkNGood",Module,31, 1.,1e5, 200,0,200)); fPar = new Double_t[40]; } //_____________________________________________________________________________ StntupleTrackFilter::~StntupleTrackFilter() { // fPar is deleted in the destructor of the base class (StntupleFilter) } //_____________________________________________________________________________ Int_t StntupleTrackFilter::Init(TStnEvent* Event) { fTrackBlock = (TStnTrackBlock*)Event->GetDataBlock("TrackBlock"); return 0; } //_____________________________________________________________________________ Int_t StntupleTrackFilter::ProcessEvent(AbsEvent* Event) { // fNInput++; StntupleInitTrackBlock(fTrackBlock,Event,0); int n = fTrackBlock->NTracks(); fPar[31] = 0; for (int i=0; iTrack(i); // here transition form non-generic to // generic occurs fPar[0] = trk->Momentum()->Pt(); fPar[1] = trk->Momentum()->Eta(); fPar[2] = trk->Z0(); fPar[3] = TStntuple::CorrectedD0(trk); fPar[4] = trk->NAxSeg(); fPar[5] = trk->NStSeg(); fPar[6] = trk->Iso4(); fPar[7] = trk->Chi2Cot()/(trk->NCotHitsTot()-4.99999); if (ApplyObjectCuts()) fPar[31]++; } //----------------------------------------------------------------------------- // now apply event-level cuts //----------------------------------------------------------------------------- fPassed = ApplyEventCuts(); if (fPassed) fNPassed++; return fPassed; }