Skip to content
Snippets Groups Projects
Commit c3fe25a8 authored by Stephen A. Wood's avatar Stephen A. Wood
Browse files

Parse detector map and think about hit list

parent 5d786977
No related branches found
No related tags found
No related merge requests found
...@@ -9,10 +9,19 @@ ...@@ -9,10 +9,19 @@
// Will need method to retrieve all map entries for a given // Will need method to retrieve all map entries for a given
// detector id. // detector id.
// //
// Not sure we will keep this class, but still need the parsing of the map file
//
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
#include "THcDetectorMap.h" #include "THcDetectorMap.h"
#include "TObjArray.h"
#include "TObjString.h"
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std; using namespace std;
ClassImp(THcDetectorMap) ClassImp(THcDetectorMap)
...@@ -32,7 +41,7 @@ void THcDetectorMap::Load(const char *fname) ...@@ -32,7 +41,7 @@ void THcDetectorMap::Load(const char *fname)
ifstream ifile; ifstream ifile;
ifile.open(fname); ifile.open(fname);
if(!ifile.is_open) { if(!ifile.is_open()) {
Error(here, "error opening detector map file %s",fname); Error(here, "error opening detector map file %s",fname);
return; // Need a success/failure argument? return; // Need a success/failure argument?
} }
...@@ -45,33 +54,74 @@ void THcDetectorMap::Load(const char *fname) ...@@ -45,33 +54,74 @@ void THcDetectorMap::Load(const char *fname)
Int_t detector=0; Int_t detector=0;
Int_t slot=0; Int_t slot=0;
string::size_type start, pos=0;
char varname[100];
while(getline(ifile,line)) { while(getline(ifile,line)) {
// BLank line or comment // BLank line or comment
if(line.empty() if(line.empty()
|| (start = line.find_first_not_of( whtspc )) == string::npos || (start = line.find_first_not_of( whtspc )) == string::npos
|| IsComment(line, start) ) || IsComment(line, start) )
continue; continue;
}
// Get rid of trailing comments and leading and trailing whitespace // cout << "MAPA: " << line << endl;
cout << "MAPA: " << line << endl;
while ((pos = line.find_first_of("!", pos+1)) != string::npos) { // Remove comment from line
if(IsComment(line, pos)) { while ((pos = line.find_first_of("!", pos+1)) != string::npos) {
line.erase(pos); if(IsComment(line, pos)) {
break; 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 // Decide if line is ROC/NSUBADD/MASK/BSUB/DETECTOR/SLOT = something
// or chan, plane, counter[, signal] // or chan, plane, counter[, signal]
if((pos=line.find_first_of("=")) != string::npos) { // Setting parameter if((pos=line.find_first_of("=")) != string::npos) { // Setting parameter
char varname[100]; strcpy(varname, (line.substr(0,pos)).c_str());
Int_t valuestartpos = pos+1;
Int_t value = atoi(line.substr(valuestartpos).c_str());
} else { // Assume channel definition // 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;
}
} }
} }
......
...@@ -21,6 +21,13 @@ THcRawHitList::~THcRawHitList() { ...@@ -21,6 +21,13 @@ THcRawHitList::~THcRawHitList() {
delete fHits; 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*) void THcRawHitList::Clear( Option_t*)
{ {
fHits->Clear(); fHits->Clear();
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include "TClonesArray.h" #include "TClonesArray.h"
#include "THcRawHit.h" #include "THcRawHit.h"
#include "THcDetectorMap.h"
#include "THaEvData.h"
#include <cassert> #include <cassert>
class THcRawHitList { class THcRawHitList {
...@@ -18,9 +20,12 @@ class THcRawHitList { ...@@ -18,9 +20,12 @@ class THcRawHitList {
THcRawHitList(const char* classname, Int_t detectorid, Int_t size); THcRawHitList(const char* classname, Int_t detectorid, Int_t size);
virtual ~THcRawHitList(); virtual ~THcRawHitList();
Int_t Fill(const THaEvData& evdata, const THcDetectorMap& dmap);
// Should detector map be a member variable too?
TClonesArray* fHits; TClonesArray* fHits;
Int_t fMaxhit; Int_t fMaxhit;
Int_t fDetectorid;
Int_t GetNHits() const { return fHits->GetLast()+1; } Int_t GetNHits() const { return fHits->GetLast()+1; }
TClonesArray* GetHits() const { return fHits; } TClonesArray* GetHits() const { return fHits; }
...@@ -35,6 +40,9 @@ class THcRawHitList { ...@@ -35,6 +40,9 @@ class THcRawHitList {
void Clear( Option_t*); void Clear( Option_t*);
protected:
Int_t fDetectorid;
private: private:
ClassDef(THcRawHitList, 0); // Raw hit class ClassDef(THcRawHitList, 0); // Raw hit class
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment