/////////////////////////////////////////////////////////////////////////////// // // /////////////////////////////////////////////////////////////////////////////// #include #include "Stntuple/mod/StntupleModule.hh" #include "Stntuple/mod/StntupleZmumuFilter.hh" #include "Stntuple/mod/InitStntupleDataBlocks.hh" #include "Stntuple/alg/TStnMuonID.hh" #include "Stntuple/obj/TStnMuonBlock.hh" #include "Stntuple/obj/TStnTrackBlock.hh" #include "Stntuple/obj/TStnEvent.hh" ClassImp(StntupleZmumuFilter) //_____________________________________________________________________________ StntupleZmumuFilter::StntupleZmumuFilter() { fMuonID = new TStnMuonID(); // defaults fMuonID->SetMinTrackBcPt ( 0.); fMuonID->SetMinTrackPt (15.); fMuonID->SetMinLooseTrackPt(10.); fMuonID->SetMaxCotChi2 ( 4.); fMuonID->SetMaxTrackD0 (500.); fMuonID->SetMaxIso1 (0.2); } //_____________________________________________________________________________ StntupleZmumuFilter::StntupleZmumuFilter(const char* Name, TModule* Module): StntupleFilter(Name,Module) { //----------------------------------------------------------------------------- // introduce cuts //----------------------------------------------------------------------------- TObjArray* cuts; //----------------------------------------------------------------------------- // object-level cuts //----------------------------------------------------------------------------- cuts = fListOfObjectCuts; Module->AddNewCommand(Module->NewCommand("zmumuPrint")); // cuts->Add(new StntupleCut("muoPt" ,Module, 0, 0.,1e5, 200,0,200)); // cuts->Add(new StntupleCut("muoEta" ,Module, 1,-1e5,1e5, 200,-5,5)); //----------------------------------------------------------------------------- // event-level cuts //----------------------------------------------------------------------------- cuts = fListOfEventCuts; cuts->Add(new StntupleCut("zmumuNTight" ,Module, 31, 1.,1e5, 20 ,0,20)); cuts->Add(new StntupleCut("zmumuNLoose" ,Module, 32, 2.,1e5, 20 ,0,20)); fPar = new Double_t[40]; fMuonID = new TStnMuonID(); // defaults fMuonID->SetMinTrackBcPt ( 0.); fMuonID->SetMinTrackPt (15.); fMuonID->SetMinLooseTrackPt(10.); // danielw added, very loose cuts fMuonID->SetMaxCotChi2 ( 40.); fMuonID->SetMaxTrackD0 (500.); fMuonID->SetMaxIso1 (0.5); } //_____________________________________________________________________________ Int_t StntupleZmumuFilter::Init(TStnEvent* Event) { fTrackBlock = (TStnTrackBlock*)Event->GetDataBlock("TrackBlock"); fMuonBlock = (TStnMuonBlock*) Event->GetDataBlock("MuonBlock"); return 0; } //_____________________________________________________________________________ StntupleZmumuFilter::~StntupleZmumuFilter() { // fPar is deleted in the destructor of the base class (StntupleFilter) delete fMuonID; } //_____________________________________________________________________________ Int_t StntupleZmumuFilter::ProcessEvent(AbsEvent* Event) { // int it, nmu, tight_id_word, loose_id_word; fNInput++; StntupleInitTrackBlock(fTrackBlock,Event,0); StntupleInitMuonBlock (fMuonBlock,Event,0); StntupleMuonBlockLinks(fMuonBlock,Event,0); nmu = fMuonBlock->NMuons(); fPar[31] = 0; // n_tight - will go fPar[32] = 0; // n_loose - will go for (int i=0; iMuon(i); it = muo->TrackNumber(); TStnTrack* trk = fTrackBlock->Track(it); //----------------------------------------------------------------------------- // here transition form non-generic to generic occurs //----------------------------------------------------------------------------- tight_id_word = fMuonID->TightIDWord(muo); if (tight_id_word == 0) fPar[31]++; loose_id_word = fMuonID->LooseIDWord(muo); if (loose_id_word == 0) fPar[32]++; } //----------------------------------------------------------------------------- // all the objects are checked, apply event-level cuts //----------------------------------------------------------------------------- fPassed = ApplyEventCuts(); if (fPassed) fNPassed++; //----------------------------------------------------------------------------- // printing //----------------------------------------------------------------------------- if (fPrintLevel == 1) { // print passed if (fPassed) fMuonBlock->Print("banner+data"); } else if (fPrintLevel == 2) { // print rejected if (! fPassed) fMuonBlock->Print("banner+data"); } return fPassed; } //_____________________________________________________________________________ Int_t StntupleZmumuFilter::Command(const char* Cmd, Int_t Argc, char** Argv) { // this has to search both event and object level cuts... int level; if (strcmp(Cmd,"zmumuPrint") == 0) { if (Argc != 3) { Error("Command",Form("%s : too many parameters",Cmd)); return -1; } else { level = atoi(Argv[2]); this->SetPrintLevel(level); } } else { StntupleFilter::Command(Cmd,Argc,Argv); } return 0; }