Universita' di GenovaINFN Sezione di Genova  
AIRWATCH / EUSO Genova

FocalSurfaceFileParser - source file

// parsing of the Focal Surface File
// $Id: FocalSurfaceFileParser.cc,v 1.3 2004/06/16 10:46:48 thea Exp $
// M. Pallavicini - created

#include "FocalSurfaceFileParser.hh"
        
ClassImp(FocalSurfaceFileParser)

// number of columns in focal surface file
#define FSFCOLUMNS 17

// ctor
 FocalSurfaceFileParser::FocalSurfaceFileParser( string& fn ) 
  : NumbersFileParser( fn, FSFCOLUMNS ) {
    fCurrent = -1;
    fOldPmt = 0;
    fOldMC = 0;
    fOldEC = 0;
    fOldChip = 0;
}

// dtor
 FocalSurfaceFileParser::~FocalSurfaceFileParser() {
}
    
// returns PMT number of the current line
// at each call move one line down
// returns 0 when number table is over
 int FocalSurfaceFileParser::NewPmtId() {
    fCurrent++;
    if ( fCurrent >= GetNumLines() ) {
        return 0;
    }
    int n = (int) GetNum( fCurrent, PmtIdCol );
    if ( n != (fOldPmt+1) ) {
        cerr << "Old = " << fOldPmt << " New=" << n << "  Lines=" << GetNumLines() << endl;
        throw runtime_error("FocalSurfaceFileParser: Format error in NewPmtId()");
    }
    fOldPmt = n;
    return n;
}

// return macrocell id if we have a new one, otherwise 0
 int FocalSurfaceFileParser::NewMacroCell() {
    int n = (int) GetNum( fCurrent, MCIdCol );
    if ( n == fOldMC ) {
        return 0;
    }
    else if ( n == (fOldMC+1) ) {
        fOldMC = n;
	return n;
    } else {
        cerr << "Old = " << fOldMC << " New=" << n << endl;
        throw runtime_error("FocalSurfaceFileParser: Format error in NewMacroCell()");
    }
}

// return elementary cell id if we have a new one, otherwise 0
 int FocalSurfaceFileParser::NewElementaryCell() {
    int n = (int) GetNum( fCurrent, ECIdCol );
    if ( n == fOldEC ) {
        return 0;
    }
    else if ( n == (fOldEC+1) ) {
        fOldEC = n;
	return n;
    } else {
        cerr << "Old = " << fOldEC << " New=" << n << endl;
        throw runtime_error("FocalSurfaceFileParser: Format error NewElementaryCell()");
    }
}

// return front end chip id if we have a new one, otherwise 0
 int FocalSurfaceFileParser::NewFrontEndChip() {
    int n = (int) GetNum( fCurrent, ChipIdCol );
    if ( n == fOldChip ) {
        return 0;
    }
    else if ( n == (fOldChip+1) ) {
        fOldChip = n;
	return n;
    } else {
        cerr << "Old= " << fOldChip << " New=" << n << endl;
        throw runtime_error("FocalSurfaceFileParser: Format error in NewFrontEndChip()");
    }
}

// geometry parameters: position 
 const EVector& FocalSurfaceFileParser::Pos() {
    fPos[0] = GetNum( fCurrent, PosXCol );
    fPos[1] = GetNum( fCurrent, PosYCol );
    fPos[2] = GetNum( fCurrent, PosZCol );
    return fPos;
}

// geometry parameters: normal
 const EVector& FocalSurfaceFileParser::Norm() {
    fNorm[0] = GetNum( fCurrent, NormXCol );
    fNorm[1] = GetNum( fCurrent, NormYCol );
    fNorm[2] = GetNum( fCurrent, NormZCol );
    return fNorm;
}

// geometry parameters: direction 
 const EVector& FocalSurfaceFileParser::Dir() {
    fDir[0] = GetNum( fCurrent, DirXCol );
    fDir[1] = GetNum( fCurrent, DirYCol );
    fDir[2] = GetNum( fCurrent, DirZCol );
    return fDir;
}

About Us | EUSO Official Website | Web pages created by Roberto Pesce and Alessandro Thea - Last Update Wed Nov 16 16:57:39 2005 Wed Nov 16 16:29:22 2005