// $MpId: AliMpTriggerReader.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $
#include "AliMpTriggerReader.h"
-#include "AliMpMotifReader.h"
+
+#include "AliLog.h"
+#include "AliMpConstants.h"
+#include "AliMpDataStreams.h"
#include "AliMpFiles.h"
+#include "AliMpHelper.h"
+#include "AliMpMotif.h"
+#include "AliMpMotifPosition.h"
+#include "AliMpMotifReader.h"
+#include "AliMpMotifSpecial.h"
#include "AliMpMotifType.h"
#include "AliMpPCB.h"
#include "AliMpSlat.h"
#include "AliMpSlatMotifMap.h"
-#include "AliMpMotifSpecial.h"
-#include "AliMpMotifPosition.h"
-#include "AliMpMotif.h"
-#include "AliMpHelper.h"
+#include "AliMpSlatMotifMap.h"
#include "AliMpSt345Reader.h"
#include "AliMpTrigger.h"
-#include "AliMpConstants.h"
-
-#include "AliLog.h"
-
#include "Riostream.h"
#include "TClass.h"
-#include "TObjString.h"
#include "TList.h"
+#include "TObjString.h"
#include "TString.h"
#include <TArrayI.h>
+#include <cstdlib>
#include <sstream>
//-----------------------------------------------------------------------------
ClassImp(AliMpTriggerReader)
/// \endcond
-const TString AliMpTriggerReader::fgkKeywordLayer("LAYER");
-const TString AliMpTriggerReader::fgkKeywordScale("SCALE");
-const TString AliMpTriggerReader::fgkKeywordPcb("PCB");
-const TString AliMpTriggerReader::fgkKeywordFlipX("FLIP_X");
-const TString AliMpTriggerReader::fgkKeywordFlipY("FLIP_Y");
+//
+// static private methods
+//
+
+//_____________________________________________________________________________
+const TString& AliMpTriggerReader::GetKeywordLayer()
+{
+ /// Keyword: LAYER
+ static const TString kKeywordLayer("LAYER");
+ return kKeywordLayer;
+}
+
+//_____________________________________________________________________________
+const TString& AliMpTriggerReader::GetKeywordScale()
+{
+ /// Keyword: SCALE
+ static const TString kKeywordScale("SCALE");
+ return kKeywordScale;
+}
//_____________________________________________________________________________
-AliMpTriggerReader::AliMpTriggerReader(AliMpSlatMotifMap& motifMap)
+const TString& AliMpTriggerReader::GetKeywordPcb()
+{
+ /// Keyword : PCB
+ static const TString kKeywordPcb("PCB");
+ return kKeywordPcb;
+}
+
+//_____________________________________________________________________________
+const TString& AliMpTriggerReader::GetKeywordFlipX()
+{
+ /// Keyword : FLIPX
+ static const TString kKeywordFlipX("FLIP_X");
+ return kKeywordFlipX;
+}
+
+//_____________________________________________________________________________
+const TString& AliMpTriggerReader::GetKeywordFlipY()
+{
+ /// Keyword : FLIPY
+ static const TString kKeywordFlipY("FLIP_Y");
+ return kKeywordFlipY;
+}
+
+//
+// ctors, dtor
+//
+
+//_____________________________________________________________________________
+AliMpTriggerReader::AliMpTriggerReader(const AliMpDataStreams& dataStreams, AliMpSlatMotifMap* motifMap)
: TObject(),
+ fkDataStreams(dataStreams),
fMotifMap(motifMap),
fLocalBoardMap()
{
TString& keyword = ((TObjString*)tokens->At(0))->String();
- if ( keyword == fgkKeywordPcb )
+ if ( keyword == GetKeywordPcb() )
{
if ( tokens->GetEntriesFast() != 3 )
{
TString& keyword = ((TObjString*)tokens->At(0))->String();
- if ( keyword == fgkKeywordPcb &&
+ if ( keyword == GetKeywordPcb() &&
tokens->GetEntriesFast() == 3 )
{
boardName = ((TObjString*)tokens->At(2))->String();
TString& s = oline->String();
- if ( !s.Contains(fgkKeywordPcb) )
+ if ( !s.Contains(GetKeywordPcb()) )
{
// Only consider PCB lines.
continue;
//___________________________________________________________________________
Int_t
-AliMpTriggerReader::IsLayerLine(const TString& sline)
+AliMpTriggerReader::IsLayerLine(const TString& sline) const
{
/// Whether sline contains LAYER keyword
- if ( sline.BeginsWith(fgkKeywordLayer) )
+ if ( sline.BeginsWith(GetKeywordLayer()) )
{
return 1;
}
TString keyword(sline(0,blankPos));
- if ( keyword == fgkKeywordFlipX )
+ if ( keyword == GetKeywordFlipX() )
{
flipX = kTRUE;
- } else if ( keyword == fgkKeywordFlipY )
+ } else if ( keyword == GetKeywordFlipY() )
{
flipY = kTRUE;
}
{
/// Decode sline containing SCALE keyword
- if ( sline(0,fgkKeywordScale.Length()) == fgkKeywordScale )
+ if ( sline(0,GetKeywordScale().Length()) == GetKeywordScale() )
{
- TString tmp(sline(fgkKeywordScale.Length()+1,
- sline.Length()-fgkKeywordScale.Length()-1));
+ TString tmp(sline(GetKeywordScale().Length()+1,
+ sline.Length()-GetKeywordScale().Length()-1));
Ssiz_t blankPos = tmp.First(' ');
if ( blankPos < 0 )
{
" destLine %d\n",slatType,scale,flipX,flipY,
srcLine,destLine));
- TString filename(AliMpFiles::SlatFilePath(AliMp::kStationTrigger,slatType,
- planeType).Data());
- std::ifstream in(filename.Data());
- if (!in.good())
- {
- AliErrorClass(Form("Cannot read slat from %s",filename.Data()));
- }
+ istream& in
+ = fkDataStreams.
+ CreateDataStream(AliMpFiles::SlatFilePath(
+ AliMp::kStationTrigger,slatType, planeType));
char line[80];
if ( sline.Length() == 0 || sline[0] == '#' ) continue;
Bool_t isKeywordThere =
- sline.Contains(fgkKeywordPcb) ||
- sline.Contains(fgkKeywordLayer) ||
- sline.Contains(fgkKeywordScale) ||
- sline.Contains(fgkKeywordFlipX) ||
- sline.Contains(fgkKeywordFlipY);
+ sline.Contains(GetKeywordPcb()) ||
+ sline.Contains(GetKeywordLayer()) ||
+ sline.Contains(GetKeywordScale()) ||
+ sline.Contains(GetKeywordFlipX()) ||
+ sline.Contains(GetKeywordFlipY());
if ( !isKeywordThere )
{
if ( isScaleLine < 0 )
{
- AliFatalClass(Form("Syntax error near %s keyword\n",fgkKeywordScale.Data()));
+ AliFatalClass(Form("Syntax error near %s keyword\n",GetKeywordScale().Data()));
}
else if ( isScaleLine > 0 && slatType2 != slatType )
{
}
}
- in.close();
+ delete ∈
}
//_____________________________________________________________________________
{
/// Reads the file that contains the mapping local board name <-> number
- TString filename(AliMpFiles::LocalTriggerBoardMapping());
-
- AliDebugClass(2,Form("Reading from %s\n",filename.Data()));
-
fLocalBoardMap.DeleteAll();
UShort_t mask;
- ifstream in(filename.Data());
- if (!in.good())
- {
- AliErrorClass(Form("Cannot read file %s\n",filename.Data()));
- }
- else
+ istream& in
+ = fkDataStreams.
+ CreateDataStream(AliMpFiles::LocalTriggerBoardMapping());
+
+ char line[80];
+ Char_t localBoardName[20];
+ Int_t j,localBoardId;
+ UInt_t switches;
+ Int_t nofBoards;
+
+ while (!in.eof())
{
- char line[80];
- Char_t localBoardName[20];
- Int_t j,localBoardId;
- UInt_t switches;
-
- while (!in.eof())
- {
- for (Int_t i = 0; i < 4; ++i)
- if (!in.getline(line,80)) continue; //skip 4 first lines
+ 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);
-
- 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;
- }
+ // read mask
+ if (!in.getline(line,80)) break;
+ sscanf(line,"%hx",&mask);
+
+ // read # boards
+ if (!in.getline(line,80)) break;
+ sscanf(line,"%d",&nofBoards);
+
+ for ( Int_t i = 0; i < nofBoards; ++i )
+ {
+
+ if (!in.getline(line,80)) break;
+ sscanf(line,"%02d %19s %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();
+
+ delete ∈
}
//_____________________________________________________________________________
pcbName = pcbName(0,pos);
}
- std::ifstream in(AliMpFiles::SlatPCBFilePath(AliMp::kStationTrigger,pcbName).Data());
- if (!in.good())
- {
- AliErrorClass(Form("Cannot open file for PCB %s",pcbName.Data()));
- return 0;
- }
+ istream& in
+ = fkDataStreams.
+ CreateDataStream(AliMpFiles::SlatPCBFilePath(
+ AliMp::kStationTrigger,pcbName));
- AliMpMotifReader reader(AliMp::kStationTrigger,AliMp::kNonBendingPlane);
+ AliMpMotifReader reader(fkDataStreams,
+ AliMp::kStationTrigger, AliMq::kNotSt12, AliMp::kNonBendingPlane);
// note that the nonbending
// parameter is of no use for trigger, as far as reading motif is
// concerned, as all motifs are supposed to be in the same directory
{
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
{
AliDebug(1,Form("Got motifType %s from motifMap",sMotifType.Data()));
}
+ if (! pcb)
+ {
+ AliError("pcb null");
+ continue;
+ }
pcb->Add(motifType,ix,iy);
}
}
- in.close();
+ delete ∈
return pcb;
}
if ( !IsLayerLine(firstLine) )
{
std::ostringstream s;
- s << fgkKeywordLayer;
+ s << GetKeywordLayer();
lines.AddFirst(new TObjString(s.str().c_str()));
}
AliMpTrigger* triggerSlat = new AliMpTrigger(slatType, planeType);
- for ( Int_t ilayer = 0; ilayer < layers.GetEntriesFast(); ++ilayer )
+ for ( ilayer = 0; ilayer < layers.GetEntriesFast(); ++ilayer )
{
- TList& lines = *((TList*)layers.At(ilayer));
+ TList& lines1 = *((TList*)layers.At(ilayer));
std::ostringstream slatName;
slatName << slatType << "-LAYER" << ilayer;
- AliMpSlat* slat = BuildSlat(slatName.str().c_str(),planeType,lines,scale);
+ AliMpSlat* slat = BuildSlat(slatName.str().c_str(),planeType,lines1,scale);
if ( slat )
{
Bool_t ok = triggerSlat->AdoptLayer(slat);
AliError("TriggerSlat is=");
for ( Int_t j = 0; j < triggerSlat->GetSize(); ++j )
{
- AliMpSlat* slat = triggerSlat->GetLayer(j);
+ AliMpSlat* slat1 = triggerSlat->GetLayer(j);
AliError(Form("Layer %d",j));
- for ( Int_t i = 0; i < slat->GetSize(); ++i )
+ for ( Int_t i = 0; i < slat1->GetSize(); ++i )
{
- AliMpPCB* pcb = slat->GetPCB(i);
+ AliMpPCB* pcb = slat1->GetPCB(i);
AliError(Form("ERR pcb %d size %e,%e (unscaled is %e,%e)",
i,pcb->DX()*2,pcb->DY()*2,
pcb->DX()*2/scale,pcb->DY()*2/scale));
}
}
- StdoutToAliError(fMotifMap.Print(););
+ StdoutToAliError(fMotifMap->Print(););
}
}
else