X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=FMD%2FAliFMDCalibPedestal.cxx;h=6735bc1e868247085919cd695a048a38354fce5c;hb=5f195a83b55ac3d5df711f50a554ae05c2f27668;hp=8795c0272833446d5582d91bda67171c457eda41;hpb=b5ee4425c93874c0ce306795eec31f8c0a87308d;p=u%2Fmrichter%2FAliRoot.git diff --git a/FMD/AliFMDCalibPedestal.cxx b/FMD/AliFMDCalibPedestal.cxx index 8795c027283..6735bc1e868 100644 --- a/FMD/AliFMDCalibPedestal.cxx +++ b/FMD/AliFMDCalibPedestal.cxx @@ -28,6 +28,12 @@ // Need to make algorithm that makes this data // #include "AliFMDCalibPedestal.h" // ALIFMDCALIBPEDESTAL_H +#include +#include +#include +#include "AliFMDDebug.h" +#include "AliFMDBoolMap.h" + //____________________________________________________________________ ClassImp(AliFMDCalibPedestal) #if 0 @@ -36,8 +42,8 @@ ClassImp(AliFMDCalibPedestal) //____________________________________________________________________ AliFMDCalibPedestal::AliFMDCalibPedestal() - : fValue(), - fWidth() + : fValue(0), // nDet == 0 mean 51200 entries + fWidth(0) // nDet == 0 mean 51200 entries { // CTOR fValue.Reset(-1.); @@ -92,6 +98,130 @@ AliFMDCalibPedestal::Width(UShort_t det, Char_t ring, UShort_t sec, return fWidth(det, ring, sec, str); } +//____________________________________________________________________ +namespace { + struct MakeDead : public AliFMDMap::ForOne + { + MakeDead(AliFMDBoolMap* dead, Float_t max) + : fDead(dead), fMax(max), fCount(0) + {} + MakeDead(const MakeDead& other) + : AliFMDMap::ForOne(other), + fDead(other.fDead), fMax(other.fMax), fCount(other.fCount) + {} + MakeDead& operator=(const MakeDead& other) + { + fDead = other.fDead; + fMax = other.fMax; + fCount = other.fCount; + return *this; + } + Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t v) + { + AliDebugGeneral("AliFMDCalibPedestal::MakeDeadMap", 100, + Form("Checking if noise of FMD%d%c[%2d,%3d]=%f " + "is larger than %f", d, r, s, t, v, fMax)); + if (v > fMax) { + fDead->operator()(d,r,s,t) = kTRUE; + fCount++; + } + return kTRUE; + } + Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t) + { return kFALSE; } + Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, UShort_t) + { return kFALSE; } + Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Bool_t) + { return kFALSE; } + AliFMDBoolMap* fDead; + Float_t fMax; + Int_t fCount; + }; +} + +//____________________________________________________________________ +AliFMDBoolMap* +AliFMDCalibPedestal::MakeDeadMap(Float_t maxW, AliFMDBoolMap* dead) const +{ + // + // Make a dead map based on the noise of the channels. If the noise + // of a paraticular channel is larger than @a maxW, then the channel + // is marked as dead. + // + // If the argument @a dead is non-null, then the map passed is + // modified. That is, channels marked as dead in the map will + // remain marked. Channels that meat the criterion (noise larger + // than @a maxW) will in addition be marked as dead. + // + // If the argument @a dead is null, then a new map is created and a + // pointer to this will be returned. + // + // Parameters: + // maxW Maximum value of noise for a channel before it is + // marked as dead. + // dead If non-null, then modify this map. + // + // Return: + // A pointer to possibly newly allocated dead map. + // + if (!dead) { + dead = new AliFMDBoolMap(0,0,0,0); + dead->Reset(kFALSE); + } + MakeDead dm(dead, maxW); + fWidth.ForEach(dm); + AliFMDDebug(1, ("Found a total of %d dead channels", dm.fCount)); + return dead; +} + +//____________________________________________________________________ +Bool_t +AliFMDCalibPedestal::ReadFromFile(std::istream& in) +{ + // + // Read information from file and set values + // + // Parameters: + // inFile inputFile + // + TString header; + header.ReadLine(in); + header.ToLower(); + if(!header.Contains("pedestals")) { + AliError("File does not contain pedestals!"); + return kFALSE; + } + + // Read columns line + int lineno = 2; + header.ReadLine(in); + + // Loop until EOF + while(in.peek()!=EOF) { + if(in.bad()) { + AliError(Form("Bad read at line %d in input", lineno)); + break; + } + UShort_t det, sec, strip; + Char_t ring; + Float_t ped, noise, mu, sigma, chi2ndf; + Char_t c[8]; + + in >> det >> c[0] + >> ring >> c[1] + >> sec >> c[2] + >> strip >> c[3] + >> ped >> c[4] + >> noise >> c[5] + >> mu >> c[6] + >> sigma >> c[7] + >> chi2ndf; + lineno++; + + Set(det,ring,sec,strip,ped,noise); + } + return kTRUE; +} //____________________________________________________________________ // // EOF