// This Class' Header ------------------ #include "TtEventBuilder.h" // C/C++ Headers ---------------------- #include // Collaborating Class Headers -------- #include "FairRootManager.h" #include "TClonesArray.h" #include "PndSdsHit.h" #include "PndSdsDigi.h" #include "PndSdsDigiStrip.h" #include "PndSdsDigiPixel.h" #include "PndSdsDigiStrip.h" #include "PndSdsDigiPixel.h" #include "TString.h" #include "TFile.h" #include "TTree.h" #include "TGeoTrack.h" #include "TGeoManager.h" #include "FairEventHeader.h" #include "TH1F.h" using namespace std; TtEventBuilder::TtEventBuilder() { std::cout << "TtEventBuilder ctor" << std::endl; fRange = 10; temp = new TH1F("TimeDifference","TimeDifference",1000,-500.5,+499.5); fSpillPix = 0; fSpillStr = 0; fOffset = 0; fOutFileName = "FilePippo"; fOutPixBranch = "Branch1Pippo"; fOutStrBranch = "Branch2Pippo"; } TtEventBuilder::~TtEventBuilder() { } void TtEventBuilder::Run() { std::cout << "hi!" << std::endl; std::cout << "Strip" << std::endl; std::cout << fInStrFileName.Data() << std::endl; std::cout << fInStrBranch.Data() << std::endl; std::cout << "Pixel" << std::endl; std::cout << fInPixFileName.Data() << std::endl; std::cout << fInPixBranch.Data() << std::endl; std::cout << "Output" << std::endl; std::cout << fOutFileName.Data() << std::endl; std::cout << fOutPixBranch.Data() << std::endl; std::cout << fOutStrBranch.Data() << std::endl; TFile *fS = new TFile(fInStrFileName.Data()); TTree *tS = (TTree*) fS->Get("cbmsim"); TClonesArray *strInput = new TClonesArray("PndSdsHit",10); tS->SetBranchAddress(fInStrBranch.Data(),&strInput); TFile *fP = new TFile(fInPixFileName.Data()); TTree *tP = (TTree*) fP->Get("cbmsim"); TClonesArray *pixInput = new TClonesArray("PndSdsHit",10); tP->SetBranchAddress(fInPixBranch.Data(),&pixInput); pixOutput = new TClonesArray("PndSdsHit",10); strOutput = new TClonesArray("PndSdsHit",10); TClonesArray &pixOut = *pixOutput; TClonesArray &strOut = *strOutput; TFile *fO = new TFile(fOutFileName.Data(),"RECREATE"); TTree *tOut = new TTree("MatchedEvents","Time-Matched Events"); tOut->SetDirectory(fO); tOut->Branch(fOutPixBranch.Data(),"TClonesArray",&pixOutput,32000,99); tOut->Branch(fOutStrBranch.Data(),"TClonesArray",&strOutput,32000,99); Int_t evOut = 0; temp->SetDirectory(fO); 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; Bool_t controlStart = false; Bool_t checkWrPix = false; std::cout << "StripEvents: " << tS->GetEntries() << std::endl; std::cout << "PixelEvents: " << tP->GetEntries() << std::endl; // loop on events //for(Long64_t ie = 0 ; ie < 100000 ; ie++) for(Long64_t ie = 0 ; ie < tS->GetEntriesFast() ; ie++) { cS = 0; cP = 0; tS->GetEvent(ie); if (strInput->GetEntries()==0) { //std::cout << "kgkgigigkgkg, Event: " << ie << std::endl; continue; } PndSdsHit *hit = (PndSdsHit*) strInput->At(0); controlStr = false; controlStart = false; if (!hit) std::cout << "ma no........" << std::endl; if (hit) { clockStr = hit->GetClock(); triggerStr = hit->GetTriggerID(); //std::cout << "barbablu, " << triggerStr << " - " << fSpillStr << std::endl; if (triggerStr!=fSpillStr) continue; clockPix = (clockStr-fOffset); triggerPix = fSpillPix; //std::cout << "* spillStr: " << triggerStr << ", spillPix " << triggerPix << ", timeStr " << clockStr << ", timePix " << clockPix << ", range " << fRange << ", diff: " << clockStr-clockPix+fOffset << std::endl; //std::cout << "@ clockPix+offset: " << (clockPix+fOffset) << " GetEntriesFast()) && (triggerPix==fSpillPix) ; ye++) { //std::cout << "~" << std::endl; tP->GetEvent(ye); checkWrPix = false; for (Int_t ke = 0 ; (ke < pixInput->GetEntries()) ; ke++) { PndSdsHit *hitP = (PndSdsHit*) pixInput->At(ke); if (hitP){ clockPix = hitP->GetClock(); triggerPix = hitP->GetTriggerID(); //std::cout << "~ spillStr: " << triggerStr << ", spillPix " << triggerPix << ", timeStr " << clockStr << ", timePix " << clockPix << ", range " << fRange << std::endl; if ((clockPix+fOffset) < (clockStr-fRange)) pEvStart = ye; //std::cout << "~ spillStr: " << triggerStr << ", spillPix " << triggerPix << ", timeStr " << clockStr << ", timePix " << clockPix << ", range " << fRange << std::endl; if ( (triggerPix==fSpillPix) && ((clockPix+fOffset) >= (clockStr-fRange)) && ((clockPix+fOffset) <= (clockStr+fRange)) ) { //std::cout << "$$$$" << std::endl; checkWrPix = true; pixOutput->Clear(); strOutput->Clear(); temp->Fill(-clockStr+(clockPix+fOffset)); for(Int_t ccPix = 0 ; ccPix < pixInput->GetEntries(); ccPix++) { PndSdsHit *buffPix = (PndSdsHit*) pixInput->At(ccPix); new(pixOut[ccPix])PndSdsHit(*buffPix); } for(Int_t ccStr = 0 ; ccStr < strInput->GetEntries(); ccStr++) { PndSdsHit *buffStr = (PndSdsHit*) strInput->At(ccStr); new(strOut[ccStr])PndSdsHit(*buffStr); } tOut->Fill(); } // end check on time coincidence } // check on pixel hit } // end loop on pixel hits within one event } // end loop on pixel events } // check on strip hit } // end of loop on strip hit tOut->SetDirectory(fO); tOut->Write(); temp->SetDirectory(fO); temp->Write(); fO->Close(); } ClassImp(TtEventBuilder);