// This Class' Header ------------------ #include "TtTimeMatch.h" // C/C++ Headers ---------------------- #include // Collaborating Class Headers -------- #include "FairRootManager.h" #include "TClonesArray.h" #include "PndSdsHit.h" #include "PndSdsDigiStrip.h" #include "PndSdsDigiPixel.h" #include "TFile.h" #include "TTree.h" #include "TGeoTrack.h" #include "TGeoManager.h" #include "FairEventHeader.h" using namespace std; TtTimeMatch::TtTimeMatch() { std::cout << "TtTimeMatch ctor" << std::endl; fRange = 10.; } TtTimeMatch::~TtTimeMatch() { } void TtTimeMatch::Run() { std::cout << "hi!" << std::endl; std::cout << fInStrFileName.Data() << std::endl; std::cout << fInPixFileName.Data() << std::endl; TFile *fS = new TFile(fInStrFileName.Data()); TTree *tS = (TTree*) fS->Get("cbmsim"); TClonesArray *strInput = new TClonesArray("PndSdsDigiStrip",10); tS->SetBranchAddress(fInStrBranch.Data(),&strInput); TFile *fP = new TFile(fInPixFileName.Data()); TTree *tP = (TTree*) fP->Get("cbmsim"); TClonesArray *pixInput = new TClonesArray("PndSdsDigiPixel",10); tP->SetBranchAddress(fInPixBranch.Data(),&pixInput); TFile *fO = new TFile(fOutFileName.Data(),"RECREATE"); TTree *tO = new TTree("cbmsim","cbmsim"); tO->SetDirectory(fO); TClonesArray *pixOutput = new TClonesArray("PndSdsDigiStrip",10); TClonesArray *strOutput = new TClonesArray("PndSdsDigiPixel",10); TClonesArray &pixO = * pixOutput; TClonesArray &strO = * strOutput; tO->Branch(fOutPixBranch.Data(),&pixOutput); tO->Branch(fOutStrBranch.Data(),&strOutput); Long64_t evS,evP; Long64_t clockStr = 0; Long64_t clockPix = 0; UInt_t triggerStr = 0.; UInt_t triggerPix = 0.; Long64_t pEvStart = 0.; Long64_t pEvStop = 0.; Int_t evPm = 0.; Int_t cS=0,cP=0; Int_t pix_c_out=0; Bool_t controlStr = false; // loop on events for(Long64_t ie = 0 ; ie < tS->GetEntriesFast() ; ie++) { cS = 0; cP = 0; pixOutput->Clear(); strOutput->Clear(); tS->GetEvent(ie); PndSdsDigiStrip *hit = (PndSdsDigiStrip*) strInput->At(0); pix_c_out = 0; controlStr = false; if (hit) { clockStr = hit->GetClock(); triggerStr = hit->GetTriggerID(); clockPix = clockStr; triggerPix = triggerStr; for(Int_t ye = pEvStart ; (clockPix < (clockStr+fRange)) && (yeGetEntriesFast()) && (triggerStr==triggerPix) ; ye++) { tP->GetEvent(ye); PndSdsHit *hitP = (PndSdsHit*) pixInput->At(0); if (hitP){ clockPix = hitP->GetClock(); triggerPix = hitP->GetTriggerID(); if ( (triggerPix==triggerStr) && (clockPix >= (clockStr-fRange)) && (clockPix <= (clockStr+fRange)) ) { if (!controlStr) { // saving strip hits for (Int_t str_c = 0 ; str_c < strInput->GetEntries() ; str_c++) { PndSdsHit* hitS2 = (PndSdsHit*) strInput->At(str_c); new(strO[str_c])PndSdsHit(*hitS2); } controlStr = true; } // saving pixel hits for (Int_t pix_c = 0 ; pix_c < pixInput->GetEntries() ; pix_c++) { PndSdsHit* hitP2 = (PndSdsHit*) pixInput->At(pix_c); new(pixO[pix_c_out])PndSdsHit(*hitP2); pix_c_out++; } tO->Fill(); // filling output tree pEvStart=ye; } // end check on time coincidence } // check on pixel hit } // end loop on pixel events } // check on strip hit } // end of loop on strip hit tO->Write(); fO->Close(); } ClassImp(TtTimeMatch);