//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class PndTpcLaserTask // see PndTpcLaserTask.h for details // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Felix Boehmer TUM (original author) // // //----------------------------------------------------------- // This Class' Header --------------------------------------- #include "PndTpcLaserTask.h" // Collaborating Class Headers -------- #include "FairRootManager.h" #include "FairRunAna.h" #include "FairRuntimeDb.h" #include "TClonesArray.h" #include "PndTpcPrimaryCluster.h" #include "PndTpcLaser.h" #include "TVector3.h" #include "TError.h" #include "PndTpcDigiPar.h" #include #include #include PndTpcLaserTask::PndTpcLaserTask() : FairTask("TPC Laser") { flaserList = new std::vector; fis_end = false; addCounter = 0; NEcount = 0; } PndTpcLaserTask::~PndTpcLaserTask() { for(unsigned int j=0;jsize();j++) delete (PndTpcLaser*)flaserList->at(j); delete flaserList; delete fcurrentLaser; delete flaserArray; } InitStatus PndTpcLaserTask::Init() { //Get ROOT Manager FairRootManager* ioman= FairRootManager::Instance(); if(ioman==0) { Error("PndTpcLaserTask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection fprimArray=(TClonesArray*) ioman->GetObject("PndTpcPrimaryCluster"); if(fprimArray==0) { Error("PndTpcLaserTask::Init","PrimaryElectron-array not found!"); return kERROR; } //clear input array of any real "physical" hits fprimArray->Delete(); //read in parameters fzMin=fpar->getZGem(); fzMax=fpar->getZMax(); frMin=fpar->getRMin(); frMax=fpar->getRMax(); return kSUCCESS; } void PndTpcLaserTask::SetParContainers() { std::cout<<"PndTpcLaserTask::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"); } void PndTpcLaserTask::Exec(Option_t* opt) { // flaserArray = new TClonesArray("PndTpcPrimaryCluster"); int size = flaserList->size(); //comes from "readFromFile()" for(int i=0;iat(i); fcurrentLaser->activate(); flaserArray = fcurrentLaser->getTrack(); if(fcurrentLaser->getNE()>0) NEcount++; Int_t nPrim = fprimArray->GetEntriesFast(); Int_t nLaser = flaserArray->GetEntriesFast(); PndTpcPrimaryCluster* test = (PndTpcPrimaryCluster*) fprimArray->At(0); //unsigned int trackID = test->mcTrackId(); //unsigned int hitID = test->mcHitId(); if(nLaser>0) addCounter++; for(Int_t j=0; jAt(j); if(cl!=NULL){ TVector3 cl_pos = cl->pos(); if(cl_pos.Perp()frMax) continue; if(cl_pos.Z()fzMax) continue; //new((*fprimArray)[fprimArray->GetEntriesFast()]) PndTpcPrimaryCluster(cl->t(),cl->q(), // cl->pos(),trackID,hitID); new((*fprimArray)[fprimArray->GetEntriesFast()]) PndTpcPrimaryCluster(cl->t(),cl->q(), cl->pos(),1,1); } } } std::cout<<"\n***LaserList had "< 0"<push_back(new PndTpcLaser(start,direction,iondens,width,time,is_end)); } void PndTpcLaserTask::setLaserFile(const char* filename, bool quiet) { ffilename = filename; readFromFile(quiet); } void PndTpcLaserTask::readFromFile(bool quiet) //ugly, needs a shapeup { std::ifstream infile(ffilename, std::fstream::in); if (!infile.good()) { Fatal("PndTpcLaserTask::readFromFile", "Laser-File not found!"); return; } bool init = false; while (infile.good()) { //initialisation while (infile.good() && !init) { char line[256]; infile.getline(line, 256); //ignore blank lines if(strcmp(line, "\0") == 0){ //std::cout<<"\nIgnoring blank line"<>fstartX>>fstartY>>fstartZ>>fdirX>>fdirY>>fdirZ>>fiondens>>fwidth >>ftime; PndTpcLaser* laser = new PndTpcLaser(TVector3(fstartX,fstartY,fstartZ), TVector3(fdirX,fdirY,fdirZ), fiondens,fwidth,ftime,fis_end); flaserList->push_back(laser); if(!quiet){ std::cout<<"\nAdded Laser:"; laser->print(); } } infile.close(); } ClassImp(PndTpcLaserTask)