ClassImp(AliMUONTrackerIO)
/// \endcond
+#include "AliDCSValue.h"
#include "AliLog.h"
#include "AliMUONCalibParamND.h"
#include "AliMUONCalibParamNF.h"
#include "AliMUONVStore.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
+#include "AliMpDEManager.h"
#include "AliMpDetElement.h"
#include <Riostream.h>
#include <TClass.h>
char line[1024];
while ( in.getline(line,1024) )
stream << line << "\n";
- datastring = TString(stream.str().c_str());
in.close();
- return DecodeOccupancy(datastring,occupancyMap);
+ return DecodeOccupancy(stream.str().c_str(),occupancyMap);
}
//_____________________________________________________________________________
Int_t
-AliMUONTrackerIO::DecodeOccupancy(TString data, AliMUONVStore& occupancyMap)
+AliMUONTrackerIO::DecodeOccupancy(const char* data, AliMUONVStore& occupancyMap)
{
/// Decode occupancy string created append values to the occupancyMap store.
/// Expected format of the file is :
}
char line[1024];
- istringstream in(data.Data());
+ istringstream in(data);
Int_t n(0);
return kCannotOpenFile;
}
- TString datastring;
ostringstream stream;
char line[1024];
while ( in.getline(line,1024) )
stream << line << "\n";
- datastring = TString(stream.str().c_str());
in.close();
- return DecodePedestals(datastring,pedStore);
+ return DecodePedestals(stream.str().c_str(),pedStore);
}
//_____________________________________________________________________________
Int_t
-AliMUONTrackerIO::DecodePedestals(TString data, AliMUONVStore& pedStore)
+AliMUONTrackerIO::DecodePedestals(const char* data, AliMUONVStore& pedStore)
{
/// Read pedestal Data (produced by the MUONTRKda.exe program for instance)
/// and append the read values into the given VStore
Int_t busPatchID, manuID, manuChannel;
Float_t pedMean, pedSigma;
Int_t n(0);
- istringstream in(data.Data());
+ istringstream in(data);
while ( in.getline(line,1024) )
{
std::istringstream sin(line);
sin >> busPatchID >> manuID >> manuChannel >> pedMean >> pedSigma;
Int_t detElemID = AliMpDDLStore::Instance()->GetDEfromBus(busPatchID);
+
+ if ( !AliMpDEManager::IsValidDetElemId(detElemID) )
+ {
+ AliErrorClass(Form("Got an invalid DE = %d from busPatchId=%d manuId=%d",
+ detElemID,busPatchID,manuID));
+ continue;
+ }
+
AliDebugClass(3,Form("BUSPATCH %3d DETELEMID %4d MANU %3d CH %3d MEAN %7.2f SIGMA %7.2f",
busPatchID,detElemID,manuID,manuChannel,pedMean,pedSigma));
return kCannotOpenFile;
}
- TString datastring;
ostringstream stream;
char line[1024];
while ( in.getline(line,1024) )
stream << line << "\n";
- datastring = TString(stream.str().c_str());
in.close();
- return DecodeGains(datastring,gainStore,comment);
+ return DecodeGains(stream.str().c_str(),gainStore,comment);
}
//_____________________________________________________________________________
Int_t
-AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
- TString& comment)
+AliMUONTrackerIO::DecodeGains(const char* data, AliMUONVStore& gainStore,
+ TString& comment)
{
/// Read gain file (produced by the MUONTRKda.exe program for instance)
/// and append the read values into the given VStore
- /// To be used when the input is a TString (for instance when getting data
+ /// To be used when the input is a string (for instance when getting data
/// from AMORE DB).
char line[1024];
- istringstream in(data.Data());
+ istringstream in(data);
Int_t busPatchID, manuID, manuChannel;
Float_t a0, a1;
Int_t thres;
Int_t* runs(0x0);
Int_t* dac(0x0);
Int_t nDAC(0);
- Int_t iDAC(0);
while ( in.getline(line,1024) )
{
in.getline(line,1024);
in.getline(line,1024);
// then get run and dac values
+ Int_t iDAC(0);
for ( Int_t i = 0; i < nDAC; ++i )
{
in.getline(line,1024);
&a0,&a1,&thres,&qual);
AliDebugClass(3,Form("line=%s",line));
Int_t detElemID = AliMpDDLStore::Instance()->GetDEfromBus(busPatchID);
+
+ if ( !AliMpDEManager::IsValidDetElemId(detElemID) )
+ {
+ AliErrorClass(Form("Got an invalid DE = %d from busPatchId=%d manuId=%d",
+ detElemID,busPatchID,manuID));
+ continue;
+ }
+
AliDebugClass(3,Form("BUSPATCH %3d DETELEMID %4d MANU %3d CH %3d A0 %7.2f "
"A1 %e THRES %5d QUAL %x",
busPatchID,detElemID,manuID,manuChannel,a0,a1,thres,qual));
//_____________________________________________________________________________
Int_t
-AliMUONTrackerIO::ReadCapacitances(const char* file, AliMUONVStore& capaStore)
+AliMUONTrackerIO::ReadCapacitances(const char* filename, AliMUONVStore& capaStore)
{
/// Read capacitance file
/// and append the read values into the given VStore
- ifstream in(gSystem->ExpandPathName(file));
- if (in.bad()) return kCannotOpenFile;
+ TString sFilename(gSystem->ExpandPathName(filename));
+
+ std::ifstream in(sFilename.Data());
+ if (!in.good())
+ {
+ return kCannotOpenFile;
+ }
+
+ ostringstream stream;
+ char line[1024];
+ while ( in.getline(line,1024) )
+ stream << line << "\n";
+
+ in.close();
+
+ return DecodeCapacitances(stream.str().c_str(),capaStore);
+}
+
+//_____________________________________________________________________________
+Int_t
+AliMUONTrackerIO::DecodeCapacitances(const char* data, AliMUONVStore& capaStore)
+{
+ /// Read capacitances and append the read values into the given VStore
+ /// To be used when the input is a string (for instance when getting data
+ /// from AMORE DB).
Int_t ngenerated(0);
char line[1024];
Int_t serialNumber(-1);
AliMUONVCalibParam* param(0x0);
-
+ istringstream in(data);
+
while ( in.getline(line,1024,'\n') )
{
if ( isdigit(line[0]) )
++ngenerated;
}
+ return ngenerated;
+}
+
+//_____________________________________________________________________________
+Int_t
+AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore, Bool_t& changed)
+{
+ /// Read config file (produced by the MUONTRKda.exe program for instance)
+ /// and append the read values into the given VStore
+ /// To be used when the input is a file (for instance when reading data
+ /// from the OCDB).
+ /// changed must be set to kFALSE before calling this method for the first time
+ /// (then the subsequent calls must not set it !)
+ ///
+
+ TString sFilename(gSystem->ExpandPathName(filename));
+
+ std::ifstream in(sFilename.Data());
+ if (!in.good())
+ {
+ return kCannotOpenFile;
+ }
+
+ ostringstream stream;
+ char line[1024];
+ while ( in.getline(line,1024) )
+ stream << line << "\n";
+
in.close();
- return ngenerated;
+ return DecodeConfig(stream.str().c_str(),confStore,changed);
+}
+
+//_____________________________________________________________________________
+Int_t
+AliMUONTrackerIO::DecodeConfig(const char* data, AliMUONVStore& confStore, Bool_t& changed)
+{
+ /// Read config data (produced by the MUONTRKda.exe program for instance)
+ /// and append the read values into the given VStore
+ /// To be used when the input is a TString (for instance when getting data
+ /// from AMORE DB).
+ /// changed must be set to kFALSE before calling this method for the first time
+ /// (then the subsequent calls must not set it !)
+
+ char line[1024];
+ Int_t busPatchID, manuID;
+ Int_t n(0);
+ istringstream in(data);
+
+ while ( in.getline(line,1024) )
+ {
+ AliDebugClass(3,Form("line=%s",line));
+ if ( line[0] == '#' )
+ {
+ TString sline(line);
+ sline.ToUpper();
+ if (sline.Contains("CHANGED") && !sline.Contains("UNCHANGED")) changed = kTRUE;
+ continue;
+ }
+ std::istringstream sin(line);
+ sin >> busPatchID >> manuID;
+
+ Int_t detElemID = AliMpDDLStore::Instance()->GetDEfromBus(busPatchID);
+
+ if ( !AliMpDEManager::IsValidDetElemId(detElemID) )
+ {
+ AliErrorClass(Form("Got an invalid DE = %d from busPatchId=%d manuId=%d",
+ detElemID,busPatchID,manuID));
+ continue;
+ }
+
+ AliMUONVCalibParam* conf =
+ static_cast<AliMUONVCalibParam*>(confStore.FindObject(detElemID,manuID));
+ if (!conf)
+ {
+ conf = new AliMUONCalibParamNF(1,1,detElemID,manuID,1);
+ confStore.Add(conf);
+ }
+ ++n;
+ }
+
+ return n;
+}
+
+//_____________________________________________________________________________
+Int_t
+AliMUONTrackerIO::WriteConfig(ofstream& out, const AliMUONVStore& confStore)
+{
+ /// Write the conf store as an ASCII file
+ /// Note that we are converting (back) the detElemId into a busPatchId
+ /// Return the number of lines written
+
+ if ( !AliMpDDLStore::Instance() )
+ {
+ cout << "ERROR: mapping not loaded. Cannot work" << endl;
+ return 0;
+ }
+
+ TIter next(confStore.CreateIterator());
+ AliMUONVCalibParam* param;
+ Int_t n(0);
+
+ while ( (param=static_cast<AliMUONVCalibParam*>(next())) )
+ {
+ Int_t detElemId = param->ID0();
+ Int_t manuId = param->ID1();
+
+ Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(detElemId,manuId);
+ ++n;
+
+ out << busPatchId << " " << manuId << endl;
+ }
+ return n;
}
+