diff --git a/src/THcDetectorMap.cxx b/src/THcDetectorMap.cxx index 1de0391dc598a6e10a090fd972ac4dcb9f80fd0f..16c537715ed9e94c0ca22a1859c0e051c40522d3 100644 --- a/src/THcDetectorMap.cxx +++ b/src/THcDetectorMap.cxx @@ -9,10 +9,19 @@ // Will need method to retrieve all map entries for a given // detector id. // +// Not sure we will keep this class, but still need the parsing of the map file +// ////////////////////////////////////////////////////////////////////////// #include "THcDetectorMap.h" +#include "TObjArray.h" +#include "TObjString.h" + +#include <iostream> +#include <fstream> +#include <cstdlib> + using namespace std; ClassImp(THcDetectorMap) @@ -32,7 +41,7 @@ void THcDetectorMap::Load(const char *fname) ifstream ifile; ifile.open(fname); - if(!ifile.is_open) { + if(!ifile.is_open()) { Error(here, "error opening detector map file %s",fname); return; // Need a success/failure argument? } @@ -45,33 +54,74 @@ void THcDetectorMap::Load(const char *fname) Int_t detector=0; Int_t slot=0; + string::size_type start, pos=0; + + char varname[100]; + while(getline(ifile,line)) { // BLank line or comment if(line.empty() || (start = line.find_first_not_of( whtspc )) == string::npos || IsComment(line, start) ) continue; - } - // Get rid of trailing comments and leading and trailing whitespace - cout << "MAPA: " << line << endl; - while ((pos = line.find_first_of("!", pos+1)) != string::npos) { - if(IsComment(line, pos)) { - line.erase(pos); - break; + + // cout << "MAPA: " << line << endl; + + // Remove comment from line + while ((pos = line.find_first_of("!", pos+1)) != string::npos) { + if(IsComment(line, pos)) { + line.erase(pos); + break; + } + } + + // Get rid of all white space + while((pos=line.find_first_of(whtspc)) != string::npos) { + line.erase(pos,1); } - } - cout << "MAPB: " << line << endl; + + // cout << "MAPB: " << line << endl; // Decide if line is ROC/NSUBADD/MASK/BSUB/DETECTOR/SLOT = something // or chan, plane, counter[, signal] - if((pos=line.find_first_of("=")) != string::npos) { // Setting parameter - char varname[100]; - - - } else { // Assume channel definition - + if((pos=line.find_first_of("=")) != string::npos) { // Setting parameter + strcpy(varname, (line.substr(0,pos)).c_str()); + Int_t valuestartpos = pos+1; + Int_t value = atoi(line.substr(valuestartpos).c_str()); + // Some if statements + if(strcasecmp(varname,"detector")==0) { + detector = value; + } else if (strcasecmp(varname,"roc")==0) { + roc = value; + } else if (strcasecmp(varname,"nsubadd")==0) { + nsubadd = value; + } else if (strcasecmp(varname,"mask")==0) { + mask = value; + } else if (strcasecmp(varname,"bsub")==0) { + bsub = value; + } else if (strcasecmp(varname,"slot")==0) { + slot = value; + } + } else { // Assume channel definition + TString values(line.c_str()); + TObjArray *vararr = values.Tokenize(","); + Int_t nvals = vararr->GetLast()+1; + if(nvals<2 || nvals>4) { + cout << "Map file: Invalid value count: " << line << endl; + continue; + } + Int_t channel = ((TObjString*)vararr->At(0))->GetString().Atoi(); + Int_t plane = ((TObjString*)vararr->At(1))->GetString().Atoi(); + Int_t counter = ((TObjString*)vararr->At(2))->GetString().Atoi(); + Int_t signal = 0; + if(nvals==4) { + signal= ((TObjString*)vararr->At(3))->GetString().Atoi(); + } + cout << channel << " " << plane << " " << counter << " " << signal << endl; + + } } } diff --git a/src/THcRawHitList.cxx b/src/THcRawHitList.cxx index 44aafedcda108bd4b4160a412ae00b86961fda35..970608cee057864ecf42dd0417fc9a6ae8dc6c8b 100644 --- a/src/THcRawHitList.cxx +++ b/src/THcRawHitList.cxx @@ -21,6 +21,13 @@ THcRawHitList::~THcRawHitList() { delete fHits; } +Int_t THcRawHitList::Fill(const THaEvData& evdata, const THcDetectorMap& dmap) +{ + // Zero out hit list + // Interate over list of channels belonging to detector, retrieving + // data that belongs to the detector +} + void THcRawHitList::Clear( Option_t*) { fHits->Clear(); diff --git a/src/THcRawHitList.h b/src/THcRawHitList.h index f68eb434d38761e8cae7bfd31db5faa4d386c95d..b548687c5c5bfbf7452c53ea969b80e223185217 100644 --- a/src/THcRawHitList.h +++ b/src/THcRawHitList.h @@ -9,6 +9,8 @@ #include "TClonesArray.h" #include "THcRawHit.h" +#include "THcDetectorMap.h" +#include "THaEvData.h" #include <cassert> class THcRawHitList { @@ -18,9 +20,12 @@ class THcRawHitList { THcRawHitList(const char* classname, Int_t detectorid, Int_t size); virtual ~THcRawHitList(); + Int_t Fill(const THaEvData& evdata, const THcDetectorMap& dmap); + // Should detector map be a member variable too? + + TClonesArray* fHits; Int_t fMaxhit; - Int_t fDetectorid; Int_t GetNHits() const { return fHits->GetLast()+1; } TClonesArray* GetHits() const { return fHits; } @@ -35,6 +40,9 @@ class THcRawHitList { void Clear( Option_t*); + protected: + Int_t fDetectorid; + private: ClassDef(THcRawHitList, 0); // Raw hit class };