ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$

#include "AliMUONGainSubprocessor.h"

#include "AliCDBMetaData.h"
#include "AliLog.h"
#include "AliMUON2DMap.h"
#include "AliMUON2DStoreValidator.h"
#include "AliMUONCalibParamNF.h"
#include "AliMUONConstants.h"
#include "AliMUONPreprocessor.h"
#include "AliMUONTrackerIO.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include <Riostream.h>
#include <TList.h>
#include <TObjString.h>
#include <TObjString.h>
#include <TSystem.h>
#include <sstream>

//-----------------------------------------------------------------------------
/// \class AliMUONGainSubprocessor
///
/// Implementation of AliMUONVSubprocessor class to deal with MUON TRK Gains.
///
/// Gains are read in from an ascii file, with the format :                               
///
///---------------------------------------------------------------------------
///
///BUS_PATCH   MANU   CHANNEL    a0   a1   thres Qual
///
///---------------------------------------------------------------------------
///
/// \author L. Aphecetche
///
//-----------------------------------------------------------------------------

/// \cond CLASSIMP
ClassImp(AliMUONGainSubprocessor)
/// \endcond

//_____________________________________________________________________________
AliMUONGainSubprocessor::AliMUONGainSubprocessor(AliMUONPreprocessor* master)
: AliMUONVSubprocessor(master,
                       "Gains",
                       "Upload MUON Tracker Gains to OCDB"),
fGains(0x0),
fSkip(kFALSE),
fComment("")
{
  /// default ctor
}

//_____________________________________________________________________________
AliMUONGainSubprocessor::~AliMUONGainSubprocessor()
{
  /// dtor
  delete fGains;
}

//_____________________________________________________________________________
Bool_t 
AliMUONGainSubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
{
  /// When starting a new run, reads in the Gains ASCII files.
  
  const Int_t kSystem = AliMUONPreprocessor::kDAQ;
  const char* kId = "GAINS";
  
  fComment = "";
  fSkip = kFALSE;
  
  delete fGains;
  fGains = new AliMUON2DMap(kTRUE);
  
  Master()->Log(Form("Reading Gain files for Run %d startTime %u endTime %u",
                     run,startTime,endTime));
  
  TList* sources = Master()->GetFileSources(kSystem,kId);
  TIter next(sources);
  TObjString* o(0x0);
  Int_t n(0);
  
  while ( ( o = static_cast<TObjString*>(next()) ) )
  {
    TString fileName(Master()->GetFile(kSystem,kId,o->GetName()));
    Int_t ok = ReadFile(fileName.Data());
    if (ok>0)
    {
      n += ok;
    }
    else if ( ok == AliMUONTrackerIO::kDummyFile )
    {
      // not an interesting file.
      fSkip = kTRUE;
      break;
    }
  }
  
  delete sources;

  if ( fSkip ) 
  {
    delete fGains;
    fGains = 0x0;
  }
  
  if (!n && !fSkip)
  {
    Master()->Log("Failed to read any Gains");
    delete fGains;
    fGains = 0x0;
    return kFALSE;
  }
  
  return kTRUE;
}

//_____________________________________________________________________________
UInt_t 
AliMUONGainSubprocessor::Process(TMap* /*dcsAliasMap*/)
{
  /// Store the Gains into the CDB
  
  if (!fGains) 
  {
    // this is the only reason to fail for the moment : getting no Gain
    // at all, except if the input file was a dummy one
    if ( fSkip ) 
    {
      return 0;
    }
    else
    {
      return 1;
    }
  }
    
  AliMUON2DStoreValidator validator;

  Master()->Log("Validating");

  TObjArray* chambers = validator.Validate(*fGains);
  
  if (chambers)
  {
    // we hereby report what's missing, but this is not a reason to fail ;-)
    // the only reason to fail would be if we got no Gain at all
    TList lines;
    lines.SetOwner(kTRUE);
  
    validator.Report(lines,*chambers);
  
    TIter next(&lines);
    TObjString* line;
  
    while ( ( line = static_cast<TObjString*>(next()) ) )
    {
      Master()->Log(line->String().Data());
    }
  }
  
  Master()->Log("Storing Gains");
  
  AliCDBMetaData metaData;
	metaData.SetBeamPeriod(0);
	metaData.SetResponsible("MUON TRK");
	metaData.SetComment(Form("Computed by AliMUONGainSubprocessor "
                           "$Id$ ; %s",fComment.Data()));
  
  Bool_t validToInfinity = kTRUE;
	Bool_t result = Master()->Store("Calib", "Gains", fGains, &metaData, 0, validToInfinity);
  
  return ( result != kTRUE ); // return 0 if everything is ok  
}

//_____________________________________________________________________________
Int_t
AliMUONGainSubprocessor::ReadFile(const char* filename)
{
  /// Read the Gains from an ASCII file.                                  
  /// Format of that file is one line per channel :                       
  ///-------------------------------------------------------------------------
  ///BUS_PATCH   MANU   CHANNEL  a0  a1 thres Qual
  ///-------------------------------------------------------------------------
  ///                                                                         
  /// Return kFALSE if reading was not successfull.                           
  ///

  TString sFilename(gSystem->ExpandPathName(filename));
  
  Master()->Log(Form("Reading %s",sFilename.Data()));
    
  Int_t n = AliMUONTrackerIO::ReadGains(sFilename.Data(),*fGains,fComment);

  switch (n)
  {
    case AliMUONTrackerIO::kCannotOpenFile:
      Master()->Log(Form("Could not open %s",sFilename.Data()));
      break;
    case AliMUONTrackerIO::kFormatError:
      Master()->Log(Form("File %s is not of the expected format",sFilename.Data()));
      break;
    case AliMUONTrackerIO::kDummyFile:
      Master()->Log(Form("File %s is a dummy one. That's fine. I won't do anything then ;-)",sFilename.Data()));
      break;
    default:
      break;
  }
  
  return n;
}
 AliMUONGainSubprocessor.cxx:1
 AliMUONGainSubprocessor.cxx:2
 AliMUONGainSubprocessor.cxx:3
 AliMUONGainSubprocessor.cxx:4
 AliMUONGainSubprocessor.cxx:5
 AliMUONGainSubprocessor.cxx:6
 AliMUONGainSubprocessor.cxx:7
 AliMUONGainSubprocessor.cxx:8
 AliMUONGainSubprocessor.cxx:9
 AliMUONGainSubprocessor.cxx:10
 AliMUONGainSubprocessor.cxx:11
 AliMUONGainSubprocessor.cxx:12
 AliMUONGainSubprocessor.cxx:13
 AliMUONGainSubprocessor.cxx:14
 AliMUONGainSubprocessor.cxx:15
 AliMUONGainSubprocessor.cxx:16
 AliMUONGainSubprocessor.cxx:17
 AliMUONGainSubprocessor.cxx:18
 AliMUONGainSubprocessor.cxx:19
 AliMUONGainSubprocessor.cxx:20
 AliMUONGainSubprocessor.cxx:21
 AliMUONGainSubprocessor.cxx:22
 AliMUONGainSubprocessor.cxx:23
 AliMUONGainSubprocessor.cxx:24
 AliMUONGainSubprocessor.cxx:25
 AliMUONGainSubprocessor.cxx:26
 AliMUONGainSubprocessor.cxx:27
 AliMUONGainSubprocessor.cxx:28
 AliMUONGainSubprocessor.cxx:29
 AliMUONGainSubprocessor.cxx:30
 AliMUONGainSubprocessor.cxx:31
 AliMUONGainSubprocessor.cxx:32
 AliMUONGainSubprocessor.cxx:33
 AliMUONGainSubprocessor.cxx:34
 AliMUONGainSubprocessor.cxx:35
 AliMUONGainSubprocessor.cxx:36
 AliMUONGainSubprocessor.cxx:37
 AliMUONGainSubprocessor.cxx:38
 AliMUONGainSubprocessor.cxx:39
 AliMUONGainSubprocessor.cxx:40
 AliMUONGainSubprocessor.cxx:41
 AliMUONGainSubprocessor.cxx:42
 AliMUONGainSubprocessor.cxx:43
 AliMUONGainSubprocessor.cxx:44
 AliMUONGainSubprocessor.cxx:45
 AliMUONGainSubprocessor.cxx:46
 AliMUONGainSubprocessor.cxx:47
 AliMUONGainSubprocessor.cxx:48
 AliMUONGainSubprocessor.cxx:49
 AliMUONGainSubprocessor.cxx:50
 AliMUONGainSubprocessor.cxx:51
 AliMUONGainSubprocessor.cxx:52
 AliMUONGainSubprocessor.cxx:53
 AliMUONGainSubprocessor.cxx:54
 AliMUONGainSubprocessor.cxx:55
 AliMUONGainSubprocessor.cxx:56
 AliMUONGainSubprocessor.cxx:57
 AliMUONGainSubprocessor.cxx:58
 AliMUONGainSubprocessor.cxx:59
 AliMUONGainSubprocessor.cxx:60
 AliMUONGainSubprocessor.cxx:61
 AliMUONGainSubprocessor.cxx:62
 AliMUONGainSubprocessor.cxx:63
 AliMUONGainSubprocessor.cxx:64
 AliMUONGainSubprocessor.cxx:65
 AliMUONGainSubprocessor.cxx:66
 AliMUONGainSubprocessor.cxx:67
 AliMUONGainSubprocessor.cxx:68
 AliMUONGainSubprocessor.cxx:69
 AliMUONGainSubprocessor.cxx:70
 AliMUONGainSubprocessor.cxx:71
 AliMUONGainSubprocessor.cxx:72
 AliMUONGainSubprocessor.cxx:73
 AliMUONGainSubprocessor.cxx:74
 AliMUONGainSubprocessor.cxx:75
 AliMUONGainSubprocessor.cxx:76
 AliMUONGainSubprocessor.cxx:77
 AliMUONGainSubprocessor.cxx:78
 AliMUONGainSubprocessor.cxx:79
 AliMUONGainSubprocessor.cxx:80
 AliMUONGainSubprocessor.cxx:81
 AliMUONGainSubprocessor.cxx:82
 AliMUONGainSubprocessor.cxx:83
 AliMUONGainSubprocessor.cxx:84
 AliMUONGainSubprocessor.cxx:85
 AliMUONGainSubprocessor.cxx:86
 AliMUONGainSubprocessor.cxx:87
 AliMUONGainSubprocessor.cxx:88
 AliMUONGainSubprocessor.cxx:89
 AliMUONGainSubprocessor.cxx:90
 AliMUONGainSubprocessor.cxx:91
 AliMUONGainSubprocessor.cxx:92
 AliMUONGainSubprocessor.cxx:93
 AliMUONGainSubprocessor.cxx:94
 AliMUONGainSubprocessor.cxx:95
 AliMUONGainSubprocessor.cxx:96
 AliMUONGainSubprocessor.cxx:97
 AliMUONGainSubprocessor.cxx:98
 AliMUONGainSubprocessor.cxx:99
 AliMUONGainSubprocessor.cxx:100
 AliMUONGainSubprocessor.cxx:101
 AliMUONGainSubprocessor.cxx:102
 AliMUONGainSubprocessor.cxx:103
 AliMUONGainSubprocessor.cxx:104
 AliMUONGainSubprocessor.cxx:105
 AliMUONGainSubprocessor.cxx:106
 AliMUONGainSubprocessor.cxx:107
 AliMUONGainSubprocessor.cxx:108
 AliMUONGainSubprocessor.cxx:109
 AliMUONGainSubprocessor.cxx:110
 AliMUONGainSubprocessor.cxx:111
 AliMUONGainSubprocessor.cxx:112
 AliMUONGainSubprocessor.cxx:113
 AliMUONGainSubprocessor.cxx:114
 AliMUONGainSubprocessor.cxx:115
 AliMUONGainSubprocessor.cxx:116
 AliMUONGainSubprocessor.cxx:117
 AliMUONGainSubprocessor.cxx:118
 AliMUONGainSubprocessor.cxx:119
 AliMUONGainSubprocessor.cxx:120
 AliMUONGainSubprocessor.cxx:121
 AliMUONGainSubprocessor.cxx:122
 AliMUONGainSubprocessor.cxx:123
 AliMUONGainSubprocessor.cxx:124
 AliMUONGainSubprocessor.cxx:125
 AliMUONGainSubprocessor.cxx:126
 AliMUONGainSubprocessor.cxx:127
 AliMUONGainSubprocessor.cxx:128
 AliMUONGainSubprocessor.cxx:129
 AliMUONGainSubprocessor.cxx:130
 AliMUONGainSubprocessor.cxx:131
 AliMUONGainSubprocessor.cxx:132
 AliMUONGainSubprocessor.cxx:133
 AliMUONGainSubprocessor.cxx:134
 AliMUONGainSubprocessor.cxx:135
 AliMUONGainSubprocessor.cxx:136
 AliMUONGainSubprocessor.cxx:137
 AliMUONGainSubprocessor.cxx:138
 AliMUONGainSubprocessor.cxx:139
 AliMUONGainSubprocessor.cxx:140
 AliMUONGainSubprocessor.cxx:141
 AliMUONGainSubprocessor.cxx:142
 AliMUONGainSubprocessor.cxx:143
 AliMUONGainSubprocessor.cxx:144
 AliMUONGainSubprocessor.cxx:145
 AliMUONGainSubprocessor.cxx:146
 AliMUONGainSubprocessor.cxx:147
 AliMUONGainSubprocessor.cxx:148
 AliMUONGainSubprocessor.cxx:149
 AliMUONGainSubprocessor.cxx:150
 AliMUONGainSubprocessor.cxx:151
 AliMUONGainSubprocessor.cxx:152
 AliMUONGainSubprocessor.cxx:153
 AliMUONGainSubprocessor.cxx:154
 AliMUONGainSubprocessor.cxx:155
 AliMUONGainSubprocessor.cxx:156
 AliMUONGainSubprocessor.cxx:157
 AliMUONGainSubprocessor.cxx:158
 AliMUONGainSubprocessor.cxx:159
 AliMUONGainSubprocessor.cxx:160
 AliMUONGainSubprocessor.cxx:161
 AliMUONGainSubprocessor.cxx:162
 AliMUONGainSubprocessor.cxx:163
 AliMUONGainSubprocessor.cxx:164
 AliMUONGainSubprocessor.cxx:165
 AliMUONGainSubprocessor.cxx:166
 AliMUONGainSubprocessor.cxx:167
 AliMUONGainSubprocessor.cxx:168
 AliMUONGainSubprocessor.cxx:169
 AliMUONGainSubprocessor.cxx:170
 AliMUONGainSubprocessor.cxx:171
 AliMUONGainSubprocessor.cxx:172
 AliMUONGainSubprocessor.cxx:173
 AliMUONGainSubprocessor.cxx:174
 AliMUONGainSubprocessor.cxx:175
 AliMUONGainSubprocessor.cxx:176
 AliMUONGainSubprocessor.cxx:177
 AliMUONGainSubprocessor.cxx:178
 AliMUONGainSubprocessor.cxx:179
 AliMUONGainSubprocessor.cxx:180
 AliMUONGainSubprocessor.cxx:181
 AliMUONGainSubprocessor.cxx:182
 AliMUONGainSubprocessor.cxx:183
 AliMUONGainSubprocessor.cxx:184
 AliMUONGainSubprocessor.cxx:185
 AliMUONGainSubprocessor.cxx:186
 AliMUONGainSubprocessor.cxx:187
 AliMUONGainSubprocessor.cxx:188
 AliMUONGainSubprocessor.cxx:189
 AliMUONGainSubprocessor.cxx:190
 AliMUONGainSubprocessor.cxx:191
 AliMUONGainSubprocessor.cxx:192
 AliMUONGainSubprocessor.cxx:193
 AliMUONGainSubprocessor.cxx:194
 AliMUONGainSubprocessor.cxx:195
 AliMUONGainSubprocessor.cxx:196
 AliMUONGainSubprocessor.cxx:197
 AliMUONGainSubprocessor.cxx:198
 AliMUONGainSubprocessor.cxx:199
 AliMUONGainSubprocessor.cxx:200
 AliMUONGainSubprocessor.cxx:201
 AliMUONGainSubprocessor.cxx:202
 AliMUONGainSubprocessor.cxx:203
 AliMUONGainSubprocessor.cxx:204
 AliMUONGainSubprocessor.cxx:205
 AliMUONGainSubprocessor.cxx:206
 AliMUONGainSubprocessor.cxx:207
 AliMUONGainSubprocessor.cxx:208
 AliMUONGainSubprocessor.cxx:209
 AliMUONGainSubprocessor.cxx:210
 AliMUONGainSubprocessor.cxx:211
 AliMUONGainSubprocessor.cxx:212
 AliMUONGainSubprocessor.cxx:213
 AliMUONGainSubprocessor.cxx:214
 AliMUONGainSubprocessor.cxx:215
 AliMUONGainSubprocessor.cxx:216
 AliMUONGainSubprocessor.cxx:217
 AliMUONGainSubprocessor.cxx:218
 AliMUONGainSubprocessor.cxx:219
 AliMUONGainSubprocessor.cxx:220
 AliMUONGainSubprocessor.cxx:221
 AliMUONGainSubprocessor.cxx:222
 AliMUONGainSubprocessor.cxx:223
 AliMUONGainSubprocessor.cxx:224
 AliMUONGainSubprocessor.cxx:225
 AliMUONGainSubprocessor.cxx:226
 AliMUONGainSubprocessor.cxx:227
 AliMUONGainSubprocessor.cxx:228