#include "L1AlgoInputMCData.h" #include "CbmL1StsHit.h" #include "CbmL1MCPoint.h" #include "CbmL1MCTrack.h" #include #include using namespace std; using std::ios; L1AlgoInputMCData::L1AlgoInputMCData( const L1AlgoInputMCData& a) { SetData( a.GetHitStore(), a.GetStsHits(), a.GetMCPoints(), a.GetMCTracks(), a.GetHitMCRef(), a.GetvSFlag(), a.GetL1StsHits()); } const L1AlgoInputMCData& L1AlgoInputMCData::operator=( const L1AlgoInputMCData& a) { SetData( a.GetHitStore(), a.GetStsHits(), a.GetMCPoints(), a.GetMCTracks(), a.GetHitMCRef(), a.GetvSFlag(), a.GetL1StsHits()); return a; } void L1AlgoInputMCData::SetData( const vector< CbmL1HitStore > & HitStore_, const vector< CbmL1StsHit > & StsHits_, const vector< CbmL1MCPoint > & MCPoints_, const vector< CbmL1MCTrack > & MCTracks_, const vector< int > & HitMCRef_, const vector< unsigned char > & vSFlag_, const vector< L1StsHit > & vL1StsHits_ ) { vHitStore.resize(HitStore_.size()); vStsHits.resize(StsHits_.size()); vMCPoints.resize(MCPoints_.size()); vMCTracks.resize(MCTracks_.size()); vHitMCRef.resize(HitMCRef_.size()); vSFlag.resize(vSFlag_.size()); vL1StsHits.resize(vL1StsHits_.size()); for(unsigned int i=0; i &McDataHit, vector &McDataHit2) // { // static int nEvent_ = 1; // static ifstream fpdata; // static char fname[100]; // // if ( nEvent_ == 1 ){ // file open on begin of all work class and close at end // strcpy(fname, work_dir); // strcat(fname, "data_perfo.txt"); // fpdata.open(fname); // } // if ( !fpdata.is_open() ) return 0; // // if (nEvent_ <= maxNEvent){ // // vMCPoints.clear(); // vMCTracks.clear(); // vHitMCRef.clear(); // vHitStore.clear(); // vStsHits.clear(); // // // check if it is right position in file // char s[] = "EVENT: "; // buffer // int nEv=0; // event number // fpdata >> s; // fpdata >> nEv; // // if (nEv != nEvent_) cout << "-E- CbmL1: Performance: can't read event number " << nEvent_ << " from file " << "data_perfo.txt" << endl; // // vMCPoints // int n; // number of elements // fpdata >> n; // // cout << n <<"vMCPoints: "<< endl; // // for (int i = 0; i < n; i++){ // CbmL1MCPoint element; // // fpdata >> element.xIn; // fpdata >> element.yIn; // fpdata >> element.zIn; // fpdata >> element.pxIn; // fpdata >> element.pyIn; // fpdata >> element.pzIn; // // fpdata >> element.xOut; // fpdata >> element.yOut; // fpdata >> element.zOut; // fpdata >> element.pxOut; // fpdata >> element.pyOut; // fpdata >> element.pzOut; // // element.x = (element.xIn + element.xOut)/2; // element.y = (element.yIn + element.yOut)/2; // element.z = (element.zIn + element.zOut)/2; // element.px = (element.pxIn + element.pxOut)/2; // element.py = (element.pyIn + element.pyOut)/2; // element.pz = (element.pzIn + element.pzOut)/2; // // fpdata >> element.p; // fpdata >> element.q; // fpdata >> element.mass; // // fpdata >> element.pdg; // fpdata >> element.ID; // // fpdata >> element.time; // // // fpdata >> element.mother_ID; // // fpdata >> element.iStation; // // int nhits; // fpdata >> nhits; // for (int k = 0; k < nhits; k++){ // int helement; // fpdata >> helement; // element.hitIds.push_back(helement); // }; // // vMCPoints.push_back(element); // }; // // // if (iVerbose >= 4) cout << "vMCPoints[" << n << "]" << " have been read." << endl; // // // vMCTracks . without Points // fpdata >> n; // // cout << n <<"vMCTracks: "<< endl; // for (int i = 0; i < n; i++){ // CbmL1MCTrack element; // // fpdata >> element.x; // fpdata >> element.y; // fpdata >> element.z; // fpdata >> element.px; // fpdata >> element.py; // fpdata >> element.pz; // fpdata >> element.p; // fpdata >> element.q; // fpdata >> element.mass; // // fpdata >> element.pdg; // fpdata >> element.ID; // fpdata >> element.mother_ID; // // int nhits; // fpdata >> nhits; // for (int k = 0; k < nhits; k++){ // int helement; // fpdata >> helement; // element.StsHits.push_back(helement); // }; // fpdata >> nhits; // for (int k = 0; k < nhits; k++){ // int helement; // fpdata >> helement; // element.Points.push_back(helement); // }; // // fpdata >> element.nMCContStations; // fpdata >> element.nHitContStations; // fpdata >> element.maxNStaMC; // fpdata >> element.maxNSensorMC; // fpdata >> element.maxNStaHits; // fpdata >> element.nStations; // // element.CalculateIsReconstructable(); // vMCTracks.push_back(element); // }; // if (iVerbose >= 4) cout << "vMCTracks[" << n << "]" << " have been read." << endl; // // // // vHitMCRef // fpdata >> n; // // cout << n <<"vHitMCRef: "<< endl; // // for (int i = 0; i < n; i++){ // int element; // fpdata >> element; // vHitMCRef.push_back(element); // }; // if (iVerbose >= 4) cout << "vHitMCRef[" << n << "]" << " have been read." << endl; // // // vHitStore // fpdata >> n; // // McDataHit.resize(300000); // McDataHit2.resize(300000); // // for (int i = 0; i < int (vMCPoints.size()); i++){ // // for (int k = 0; k < int (vMCPoints[i].hitIds.size()); k++) // { // // McDataHit[vMCPoints[i].hitIds[k]]=vMCPoints[i].p; // McDataHit2[vMCPoints[i].hitIds[k]]=vMCPoints[i].mass; // // // } // } // // // // cout << n <<" vHitStore "<< endl; // for (int i = 0; i < n; i++){ // CbmL1HitStore element; // fpdata >> element.ExtIndex; // fpdata >> element.iStation; // // fpdata >> element.x; // fpdata >> element.y; // vHitStore.push_back(element); // // cout << element.ExtIndex << " "<< element.iStation << " "<< element.x << " "<< element.y << " " << endl; // }; // if (iVerbose >= 4) cout << "vHitStore[" << n << "]" << " have been read." << endl; // // // vStsHits // fpdata >> n; // // cout << n <<" vStsHits"<< endl; // for (int i = 0; i < n; i++){ // CbmL1StsHit element; // fpdata >> element.hitId; // fpdata >> element.extIndex; // // int nPoints; // fpdata >> nPoints; // element.mcPointIds.clear(); // for (int k = 0; k < nPoints; k++){ // int id; // fpdata >> id; // element.mcPointIds.push_back(id); // }; // vStsHits.push_back(element); // }; // if (iVerbose >= 4) cout << "vStsHits[" << n << "]" << " have been read." << endl; // // // // if (nEvent == maxNEvent) { // file open on begin of all work class and close at end // // fpdata.close(); // // cout << " -I- Performance: data read from file " << "data_perfo.txt" << " successfully"<< endl; // // } // if (iVerbose >= 2) cout << "-I- CbmL1: L1Performance data for event " << nEvent_ << " has been read from file " << fname << " successfully." << endl; // // } // if (nEvent <= maxNEvent) // nEvent_++; // return 1; // } // void Performance::ReadStAPPerfoData() bool L1AlgoInputMCData::ReadMCDataFromFile(const char work_dir[100], const int maxNEvent, const int iVerbose, vector &McDataHit, vector &McDataHit2) { static int nEvent_ = 1; static ifstream fpdata; static char fname[100]; if ( nEvent_ == 1 ){ // file open on begin of all work class and close at end strcpy(fname, work_dir); strcat(fname, "data_perfo.txt"); fpdata.open(fname); } if ( !fpdata.is_open() ) return 0; if (nEvent_ <= maxNEvent){ vMCPoints.clear(); vMCTracks.clear(); vHitMCRef.clear(); vHitStore.clear(); vStsHits.clear(); // check if it is right position in file char s[] = "EVENT: "; // buffer int nEv=0; // event number fpdata >> s; fpdata >> nEv; if (nEv != nEvent_) cout << "-E- CbmL1: Performance: can't read event number " << nEvent_ << " from file " << "data_perfo.txt" << endl; // vMCPoints int n; // number of elements fpdata >> n; // cout << n <<"vMCPoints: "<< endl; for (int i = 0; i < n; i++){ CbmL1MCPoint element; fpdata >> element.xIn; fpdata >> element.yIn; fpdata >> element.zIn; fpdata >> element.pxIn; fpdata >> element.pyIn; fpdata >> element.pzIn; fpdata >> element.xOut; fpdata >> element.yOut; fpdata >> element.zOut; fpdata >> element.pxOut; fpdata >> element.pyOut; fpdata >> element.pzOut; element.x = (element.xIn + element.xOut)/2; element.y = (element.yIn + element.yOut)/2; element.z = (element.zIn + element.zOut)/2; element.px = (element.pxIn + element.pxOut)/2; element.py = (element.pyIn + element.pyOut)/2; element.pz = (element.pzIn + element.pzOut)/2; fpdata >> element.p; fpdata >> element.q; fpdata >> element.mass; fpdata >> element.time; fpdata >> element.pdg; fpdata >> element.ID; fpdata >> element.mother_ID; fpdata >> element.iStation; int nhits; fpdata >> nhits; for (int k = 0; k < nhits; k++){ int helement; fpdata >> helement; element.hitIds.push_back(helement); }; vMCPoints.push_back(element); }; if (iVerbose >= 4) cout << "vMCPoints[" << n << "]" << " have been read." << endl; // vMCTracks . without Points fpdata >> n; // cout << n <<"vMCTracks: "<< endl; for (int i = 0; i < n; i++){ CbmL1MCTrack element; fpdata >> element.x; fpdata >> element.y; fpdata >> element.z; fpdata >> element.px; fpdata >> element.py; fpdata >> element.pz; fpdata >> element.p; fpdata >> element.q; fpdata >> element.mass; fpdata >> element.time; fpdata >> element.pdg; fpdata >> element.ID; fpdata >> element.mother_ID; int nhits; fpdata >> nhits; for (int k = 0; k < nhits; k++){ int helement; fpdata >> helement; element.StsHits.push_back(helement); }; fpdata >> nhits; for (int k = 0; k < nhits; k++){ int helement; fpdata >> helement; element.Points.push_back(helement); }; fpdata >> element.nMCContStations; fpdata >> element.nHitContStations; fpdata >> element.maxNStaMC; fpdata >> element.maxNSensorMC; fpdata >> element.maxNStaHits; fpdata >> element.nStations; //element.CalculateIsReconstructable(vMCPoints, vL1StsHits, vSFlag, vHitStore); vMCTracks.push_back(element); }; if (iVerbose >= 4) cout << "vMCTracks[" << n << "]" << " have been read." << endl; // vHitMCRef fpdata >> n; // cout << n <<"vHitMCRef: "<< endl; for (int i = 0; i < n; i++){ int element; fpdata >> element; vHitMCRef.push_back(element); }; if (iVerbose >= 4) cout << "vHitMCRef[" << n << "]" << " have been read." << endl; // vHitStore fpdata >> n; // McDataHit.resize(30000000); // McDataHit2.resize(30000000); // // for (int i = 0; i < int (vMCPoints.size()); i++){ // // for (int k = 0; k < int (vMCPoints[i].hitIds.size()); k++) // { // // McDataHit[vMCPoints[i].hitIds[k]]=vMCPoints[i].p; // McDataHit2[vMCPoints[i].hitIds[k]]=vMCPoints[i].mass; // // // } // } McDataHit.resize(30000000); McDataHit2.resize(30000000); for (int i = 0; i < int (vMCPoints.size()); i++){ for (int k = 0; k < int (vMCPoints[i].hitIds.size()); k++) { McDataHit[vMCPoints[i].hitIds[k]]=vMCPoints[i].p; McDataHit2[vMCPoints[i].hitIds[k]]=vMCPoints[i].mass; } } // cout << n <<" vHitStore "<< endl; for (int i = 0; i < n; i++){ CbmL1HitStore element; fpdata >> element.ExtIndex; fpdata >> element.iStation; fpdata >> element.x; fpdata >> element.y; vHitStore.push_back(element); // cout << element.ExtIndex << " "<< element.iStation << " "<< element.x << " "<< element.y << " " << endl; }; if (iVerbose >= 4) cout << "vHitStore[" << n << "]" << " have been read." << endl; // vStsHits fpdata >> n; // cout << n <<" vStsHits"<< endl; for (int i = 0; i < n; i++){ CbmL1StsHit element; fpdata >> element.hitId; fpdata >> element.extIndex; int nPoints; fpdata >> nPoints; element.mcPointIds.clear(); for (int k = 0; k < nPoints; k++){ int id; fpdata >> id; element.mcPointIds.push_back(id); }; vStsHits.push_back(element); }; if (iVerbose >= 4) cout << "vStsHits[" << n << "]" << " have been read." << endl; for (int i = 0; i < vMCTracks.size(); i++){ vMCTracks[i].CalculateIsReconstructable(vMCPoints, vL1StsHits, vSFlag, vHitStore);} // if (nEvent == maxNEvent) { // file open on begin of all work class and close at end // fpdata.close(); // cout << " -I- Performance: data read from file " << "data_perfo.txt" << " successfully"<< endl; // } if (iVerbose >= 2) cout << "-I- CbmL1: L1Performance data for event " << nEvent_ << " has been read from file " << fname << " successfully." << endl; } // if (nEvent <= maxNEvent) nEvent_++; return 1; } // void Performance::ReadStAPPerfoData()