/// delete hits on rows /// to compile: cmake dataConverter /// to run: ./dataConverter NEvents InputDir OutputDir. #define DEBUG #define MUTE1 #define MUTE2 #include #include #include #include #include #include // for atoi #include using namespace std; typedef float fscal; #include "AliHLTTPCCAMCPoint.h" #include "AliHLTTPCCAMCTrack.h" #include "AliHLTTPCCAGBHit.h" #include "AliHLTTPCPerformanceBase.h" #include "AliHLTTPCCAParam.h" char work_dir[100] = "/u/akishina/STT/Data_Panda/1GeV_10tr/"; char out_dir[100] = "/u/akishina/STT/Data_Panda/Valia/"; class TData{ public: void ReadData(); void WriteData() const; void Process(); private: bool ReadMCDataFromFiles(string prefix); bool ReadHitsFromFile(string prefix); bool ReadSettingsFromFile(string prefix); bool WriteMCDataToFiles(string prefix) const; bool WriteHitsToFile(string prefix) const; bool WriteSettingsToFile(string prefix) const; int NewIRow( int ir ) const { if (ir%2 == 1) return -1; else return ir/2; } // int NewIRow( int ir ) const { // if (ir%4 != 0) return -1; // else return ir/4; } // int NewIRow( int ir ) const { // if (ir < 13) return ir; // if ((ir-13)%2 == 1) return -1; // else return (ir-13)/2+13; } vector vHits; vector vMCPoints; vector vMCTracks; vector vHitLabel; vector mSliceParam; }; void TData::Process() { int id = 0; for (unsigned int i = 0; i < vHits.size(); i++) { const AliHLTTPCCAGBHit &p = vHits[i]; const int ir = NewIRow(p.IRow()); if ( ir < 0 ) continue; vHits[id] = p; vHits[id].SetID( id ); vHits[id].SetIRow( ir ); vHitLabel[id] = vHitLabel[i]; id++; } vHits.resize(id); vHitLabel.resize(id); for (unsigned int i = 0; i < vMCTracks.size(); i++) { AliHLTTPCCAMCTrack& tr = vMCTracks[i]; tr.SetFirstMCPointID( 0 ); tr.SetNMCPoints( 0 ); } id = 0; int lastTrI = -1; for (unsigned int i = 0; i < vMCPoints.size(); i++) { const AliHLTTPCCALocalMCPoint &p = vMCPoints[i]; const int ir = NewIRow(p.IRow()); if ( ir < 0 ) continue; const int trI = p.TrackI(); AliHLTTPCCAMCTrack& tr = vMCTracks[trI]; if( trI != lastTrI ) { lastTrI = trI; tr.SetFirstMCPointID( id ); } tr.SetNMCPoints(tr.NMCPoints()+1); vMCPoints[id] = p; vMCPoints[id].SetIRow( ir ); id++; } vMCPoints.resize(id); for (unsigned int iS = 0; iS < mSliceParam.size(); iS++) { AliHLTTPCCAParam &p = mSliceParam[iS]; int nRows = 0; int nInnerRows = 0; for( int i = 0; i < p.NRows(); i++ ) { const int ir = NewIRow(i); if ( ir >= 0 ) { nRows++; if (i < p.NInnerRows()) nInnerRows++; } p.SetRowX( ir, p.RowX(i) ); } p.SetNRows(nRows); p.SetNInnerRows(nInnerRows); } } void TData::ReadData() { vHits.clear(); vMCPoints.clear(); vMCTracks.clear(); vHitLabel.clear(); #ifndef MUTE0 cout << " ReadData"<= 2){ NEvents = atoi(argv[1]); } if (argc >= 3){ strcpy(work_dir,argv[2]); } if (argc >= 4){ strcpy(out_dir,argv[3]); } std::cout << " Create " << NEvents << " events." << std::endl; std::cout << " Input Dir = " << work_dir << std::endl; std::cout << " Output Dir = " << out_dir << std::endl; for (int igEv = 0; igEv < NEvents; igEv++ ){ cout << " Event " << igEv << endl; TData data; data.ReadData(); data.Process(); // std::sort( data_out.vHits.begin(), data_out.vHits.end(), AliHLTTPCCAGBHit::Compare ); // vector vHitLabelSorted(data_out.vHitLabel.size()); // for(int iH=0; iH> Size; cout<> l; } ifile.close(); return 1; } bool TData::ReadSettingsFromFile(string prefix) { ifstream in((prefix+"settings.data").data()); if ( !in.is_open() ) return 0; int nSlices = 0; in >> nSlices; cout<<"SliceParamRead"<> mSliceParam[iSlice]; } return 1; } bool TData::ReadMCDataFromFiles(string prefix) { { ifstream ifile((prefix+"hitLabels.data").data()); if ( !ifile.is_open() ) return 0; int Size; ifile >> Size; cout<> l; } ifile.close(); } { ifstream ifile((prefix+"MCTracks.data").data()); if ( !ifile.is_open() ) return 0; int Size; ifile >> Size; cout<> l; } ifile.close(); } { ifstream ifile((prefix+"MCPoints.data").data()); if ( !ifile.is_open() ) return 0; int Size; ifile >> Size; cout<> l; } ifile.close(); } return 1; } bool TData::WriteHitsToFile(string prefix) const { ofstream ifile((prefix+"hits.data").data()); if ( !ifile.is_open() ) return 0; int Size = vHits.size(); ifile << Size<