#include "AliMpHelper.h"
#include "AliMpSt345Reader.h"
#include "AliMpTrigger.h"
+#include "AliMpConstants.h"
#include "AliLog.h"
#include "TObjString.h"
#include "TList.h"
#include "TString.h"
-
+#include <TArrayI.h>
#include <sstream>
-///
+//-----------------------------------------------------------------------------
/// \class AliMpTriggerReader
/// Read trigger slat ASCII files
/// Basically provides two methods:
/// - AliMpPCB* ReadPCB()
///
/// \author Laurent Aphecetche
+//-----------------------------------------------------------------------------
/// \cond CLASSIMP
ClassImp(AliMpTriggerReader)
const TString AliMpTriggerReader::fgkKeywordFlipY("FLIP_Y");
//_____________________________________________________________________________
-AliMpTriggerReader::AliMpTriggerReader(AliMpSlatMotifMap& motifMap)
+AliMpTriggerReader::AliMpTriggerReader()
: TObject(),
- fMotifMap(motifMap),
+ fMotifMap(AliMpSlatMotifMap::Instance()),
fLocalBoardMap()
{
///
fLocalBoardMap.DeleteAll();
+ UShort_t mask;
+
ifstream in(filename.Data());
if (!in.good())
{
else
{
char line[80];
+ Char_t localBoardName[20];
+ Int_t j,localBoardId;
+ UInt_t switches;
- while ( in.getline(line,80) )
+ while (!in.eof())
{
- if ( line[0] == '#' ) continue;
+ for (Int_t i = 0; i < 4; ++i)
+ if (!in.getline(line,80)) continue; //skip 4 first lines
+
+ // read mask
+ if (!in.getline(line,80)) break;
+ sscanf(line,"%hx",&mask);
- TString sline(line);
- if ( sline.Contains("Board") )
- {
- TObjArray* tokens = sline.Tokenize(' ');
- TString& number = ((TObjString*)(tokens->At(1)))->String();
- Int_t n = atoi(number.Data());
- if ( n == 0 ) continue;
- TString& name = ((TObjString*)(tokens->At(4)))->String();
- fLocalBoardMap.Add(new TObjString(name), new TObjString(number));
- AliDebugClass(10,Form("Board %s has number %s\n",name.Data(),number.Data()));
- delete tokens;
+ for ( Int_t i = 0; i < 16; ++i )
+ {
+ if ( (mask >> i ) & 0x1 )
+ {
+ if (!in.getline(line,80)) break;
+ sscanf(line,"%02d %s %03d %03x", &j, localBoardName, &localBoardId, &switches);
+ if (localBoardId <= AliMpConstants::NofLocalBoards())
+ {
+ fLocalBoardMap.Add(new TObjString(localBoardName), new TObjString(Form("%d",localBoardId)));
+ AliDebugClass(10,Form("Board %s has number %d\n", localBoardName, localBoardId));
+ }
+ // skip 2 following lines
+ if (!in.getline(line,80)) break;
+ if (!in.getline(line,80)) break;
+ }
}
}
}
+
in.close();
}
{
AliError("pcb not null as expected");
}
- pcb = new AliMpPCB(&fMotifMap,pcbType,padSizeX*scale,padSizeY*scale,
+ pcb = new AliMpPCB(fMotifMap,pcbType,padSizeX*scale,padSizeY*scale,
pcbSizeX*scale,pcbSizeY*scale);
}
TString id = reader.MotifSpecialName(sMotifSpecial,scale);
AliMpMotifSpecial* specialMotif =
- dynamic_cast<AliMpMotifSpecial*>(fMotifMap.FindMotif(id));
+ dynamic_cast<AliMpMotifSpecial*>(fMotifMap->FindMotif(id));
if (!specialMotif)
{
AliDebug(1,Form("Reading motifSpecial %s (%s) from file",
sMotifSpecial.Data(),id.Data()));
- AliMpMotifType* motifType = fMotifMap.FindMotifType(sMotifType.Data());
+ AliMpMotifType* motifType = fMotifMap->FindMotifType(sMotifType.Data());
if ( !motifType)
{
AliDebug(1,Form("Reading motifType %s (%s) from file",
sMotifType.Data(),id.Data()));
motifType = reader.BuildMotifType(sMotifType.Data());
- fMotifMap.AddMotifType(motifType);
+ fMotifMap->AddMotifType(motifType);
}
else
{
sMotifType.Data(),id.Data()));
}
specialMotif = reader.BuildMotifSpecial(sMotifSpecial,motifType,scale);
- fMotifMap.AddMotif(specialMotif);
+ fMotifMap->AddMotif(specialMotif);
}
else
{
int iy;
sin >> sMotifType >> ix >> iy;
- AliMpMotifType* motifType = fMotifMap.FindMotifType(sMotifType.Data());
+ AliMpMotifType* motifType = fMotifMap->FindMotifType(sMotifType.Data());
if ( !motifType)
{
AliDebug(1,Form("Reading motifType %s from file",sMotifType.Data()));
motifType = reader.BuildMotifType(sMotifType.Data());
- fMotifMap.AddMotifType(motifType);
+ fMotifMap->AddMotifType(motifType);
}
else
{
TString& s = osline->String();
if ( IsLayerLine(s) )
{
- TList* list(new TList);
+ TList* list = new TList;
list->SetOwner(kTRUE);
layers.Add(list);
++ilayer;
pcb->DX()*2/scale,pcb->DY()*2/scale));
}
}
- StdoutToAliError(fMotifMap.Print(););
+ StdoutToAliError(fMotifMap->Print(););
}
}
else