//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class PndTpcEvtMixTask // see PndTpcEvtMixTask.h for details // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Sebastian Neubert TUM (original author) // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "PndTpcEvtMixTask.h" // C/C++ Headers ---------------------- // Collaborating Class Headers -------- #include "CbmRootManager.h" #include "TClonesArray.h" #include "PndTpcSignal.h" #include "TRandom.h" #include "TFile.h" #include "TTree.h" #include "TBranch.h" #include // Class Member definitions ----------- PndTpcEvtMixTask::PndTpcEvtMixTask() : CbmTask("TPC Background Event Addmixer"), _inBranchName("PndTpcSignal"), _bkgBranchName("PndTpcSignal"), _bkgFileName(""), _signalArray(NULL), _bkgArray(NULL), _persistence(kFALSE), _meanEvtSpacing(100), _nbkgEvts(0) {} PndTpcEvtMixTask::~PndTpcEvtMixTask() { if(_bkgBranch!=NULL){ delete _bkgBranch; } if(_bkgTree!=NULL){ delete _bkgTree; } if(_inFile!=NULL){ _inFile->Close(); delete _inFile; } } InitStatus PndTpcEvtMixTask::Init() { std::cout<< "PndTpcEvtMixTask::Init()" <GetObject(_inBranchName); if(_signalArray==0) { Error("Init","signal-array not found!"); return kERROR; } // open input file with background events if(_bkgFileName.IsNull()) { Error("Init","background file not found"); return kERROR; } _inFile=TFile::Open(_bkgFileName,"READ"); if(!_inFile->IsOpen()) { Error("Init","background file could not be opened"); return kERROR; } _bkgTree=(TTree*)_inFile->Get("cbmsim"); if(_bkgTree==NULL) { Error("Init","cbmsim tree not found in bkgfile"); return kERROR; } //check if there are enough bkg events in tree Int_t n=_bkgTree->GetEntries(); if(n<_nbkgEvts) { Error("Init","Not enough events in bkg file. Setting nbkgEvents to %i",n); _nbkgEvts=n; } // Create bkgArray _bkgArray = new TClonesArray(_bkgBranchName); _bkgTree->SetBranchAddress(_bkgBranchName,&_bkgArray); return kSUCCESS; } void PndTpcEvtMixTask::Exec(Option_t* opt) { std::cout<< "PndTpcEvtMixTask::Exec" << std::endl; // clean up _bkgArray; //_bkgArray->Delete(); // Look at this event geantHits in the TPC: Int_t iout=_signalArray->GetEntriesFast(); std::cout<Exp(_meanEvtSpacing); //std::cout<<"tevent="<GetEntry(i); if(_bkgArray==NULL) Fatal("PndTpcEvtMixTask::Exec","bkgArray not loadable"); // copy bkg array into output array Int_t nsig=_bkgArray->GetEntriesFast(); for(Int_t ip=0;ipAt(ip); // TODO: modify time of point according to event time sig->sett(sig->t()+tevent); sig->setmcEventId(i+1); // Add background to point-array of this event new((*_signalArray)[iout++]) PndTpcSignal(*sig); } } //_bkgArray->Print(); std::cout<<_signalArray->GetEntriesFast()<<" total signals in signalArray"<