//----------------------------------------------------------- // 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 "FairRootManager.h" #include "FairRun.h" #include "FairRuntimeDb.h" #include "TClonesArray.h" #include "PndTpcSignal.h" #include "PndTpcEvtTime.h" #include "PndTpcDigiPar.h" #include "PndTpcPad.h" #include "PndTpcPadPlane.h" #include "TRandom.h" #include "TFile.h" #include "TTree.h" #include "TBranch.h" #include // Class Member definitions ----------- PndTpcEvtMixTask::PndTpcEvtMixTask() : FairTask("TPC Background Event Addmixer"), finBranchName("PndTpcSignal"), fbkgBranchName("PndTpcSignal"), fbkgFileName(""), fsignalArray(NULL), ftimeArray(NULL), fbkgArray(NULL), fpersistence(kFALSE), fnbkgEvts(0) {} PndTpcEvtMixTask::~PndTpcEvtMixTask() { if(fbkgBranch!=NULL){ delete fbkgBranch; } if(fbkgTree!=NULL){ delete fbkgTree; } if(finFile!=NULL){ finFile->Close(); delete finFile; } } void PndTpcEvtMixTask::SetParContainers() { std::cout<<"PndTpcEvtMixTask::SetParContainers"<GetRuntimeDb(); if ( ! db ) Fatal("SetParContainers", "No runtime database"); // Get PndTpc digitisation parameter container fpar= (PndTpcDigiPar*) db->getContainer("PndTpcDigiPar"); if (! fpar ) Fatal("SetParContainers", "PndTpcDigiPar not found"); } InitStatus PndTpcEvtMixTask::Init() { std::cout<< "PndTpcEvtMixTask::Init()" <GetObject(finBranchName); if(fsignalArray==0) { Error("Init","signal-array not found!"); return kERROR; } // open input file with background events if(fbkgFileName.IsNull()) { Error("Init","background file not found"); return kERROR; } finFile=TFile::Open(fbkgFileName,"READ"); if(!finFile->IsOpen()) { Error("Init","background file could not be opened"); return kERROR; } fbkgTree=(TTree*)finFile->Get("cbmsim"); if(fbkgTree==NULL) { Error("Init","cbmsim tree not found in bkgfile"); return kERROR; } //check if there are enough bkg events in tree Int_t n=fbkgTree->GetEntries(); if(nSetBranchAddress(fbkgBranchName,&fbkgArray); fbkgTree->SetBranchAddress("PndTpcEvtTime",&ftimeArray); fpadPlane= fpar->getPadPlane(); return kSUCCESS; } void PndTpcEvtMixTask::Exec(Option_t* opt) { std::cout<< "PndTpcEvtMixTask::Exec" << std::endl; // Look at this event geantHits in the TPC: Int_t iout=fsignalArray->GetEntriesFast(); std::cout<GetEntry(i); double tevent=((PndTpcEvtTime*)ftimeArray->At(0))->t0(); //std::cout<<"tevent="<GetEntriesFast(); for(Int_t ip=0;ipAt(ip); // check if signal lies in region of interest unsigned int sec=fpadPlane->GetPad(sig->padId())->sectorId(); if(fsectors.size()>0 && fsectors.find(sec)==fsectors.end()){ // std::cout << "Skipping sig. Sector" // << sec << " not in list." << std::endl; continue; } // 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((*fsignalArray)[iout++]) PndTpcSignal(*sig); } } //fbkgArray->Print(); std::cout<GetEntriesFast()<<" total signals in signalArray"<