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 "AliMUONOccupancySubprocessor.h"

#include "AliCDBMetaData.h"
#include "AliMUON2DMap.h"
#include "AliMUONPreprocessor.h"
#include "AliMUONTrackerIO.h"
#include "TObjString.h"
#include "TSystem.h"

//-----------------------------------------------------------------------------
/// \class AliMUONOccupancySubprocessor
///
/// Implementation of AliMUONVSubprocessor class to deal with MUON TRK occupancy.
///
/// Values to compute the occupancy are read in from an ascii file,
/// with the format :               \n
///---------------------------------------------------------------------------\n
/// BUS_PATCH MANU_ADDR SUM_N NEVENTS
///---------------------------------------------------------------------------\n
///
/// \author L. Aphecetche
//-----------------------------------------------------------------------------

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

//_____________________________________________________________________________
AliMUONOccupancySubprocessor::AliMUONOccupancySubprocessor(AliMUONPreprocessor* master)
: AliMUONVSubprocessor(master,"Occupancy","Upload MUON Tracker occupancy to OCDB"),
fOccupancyMap(0x0)
{
  /// Default ctor
}

//_____________________________________________________________________________
AliMUONOccupancySubprocessor::~AliMUONOccupancySubprocessor()
{
  /// dtor
  delete fOccupancyMap;
}

//_____________________________________________________________________________
Bool_t 
AliMUONOccupancySubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
{
  /// When starting a new run, reads in the occupancy ASCII files.
  
  const Int_t kSystem = AliMUONPreprocessor::kDAQ;
  const char* kId = "OCCUPANCY";
  
  delete fOccupancyMap;
  fOccupancyMap = new AliMUON2DMap(kTRUE);
  
  Master()->Log(Form("Reading occupancy file 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 || ok == AliMUONTrackerIO::kNoInfoFile )
    {
      n += ok;
    }
  }
  
  delete sources;

  if (!n)
  {
    Master()->Log("Failed to read any occupancy");
    delete fOccupancyMap;
    fOccupancyMap = 0;
    return kFALSE;
  }
  return kTRUE;
}

//_____________________________________________________________________________
UInt_t 
AliMUONOccupancySubprocessor::Process(TMap* /*dcsAliasMap*/)
{
  /// Store the occupancy map into the CDB
  
  if (!fOccupancyMap) 
  {
    // this is the only reason to fail for the moment : getting no occupancy
    // at all.
    return 1;
  }
  
  if ( fOccupancyMap->GetSize() )
  {
    Master()->Log("Storing occupancy map");
  
    AliCDBMetaData metaData;
    metaData.SetBeamPeriod(0);
    metaData.SetResponsible("MUON TRK");
    TString comment("Computed by AliMUONOccupancySubprocessor $Id$");
    comment.ReplaceAll("$","");
    metaData.SetComment(comment.Data());
    
    Bool_t validToInfinity = kFALSE;
    Bool_t result = Master()->Store("Calib", "OccupancyMap", fOccupancyMap, &metaData, 0, validToInfinity);
  
    return ( result != kTRUE ); // return 0 if everything is ok.  
  }
  else
  {
    Master()->Log("No occupancy map to store");
    return 0;
  }
}

//_____________________________________________________________________________
Int_t
AliMUONOccupancySubprocessor::ReadFile(const char* filename)
{
  /// Read the occupancy from an ASCII file.                                  \n
  /// Return kFALSE if reading was not successfull.                           \n
  ///
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  Master()->Log(Form("Reading %s",sFilename.Data()));
  
  Int_t n = AliMUONTrackerIO::ReadOccupancy(sFilename.Data(),*fOccupancyMap);
  
  switch (n)
  {
    case -1:
      Master()->Log(Form("Could not open %s",sFilename.Data()));
      break;
  }
  
  return n;
}


//_____________________________________________________________________________
void
AliMUONOccupancySubprocessor::Print(Option_t* opt) const
{
  /// ouput to screen
  if (fOccupancyMap) fOccupancyMap->Print("",opt);
}

 AliMUONOccupancySubprocessor.cxx:1
 AliMUONOccupancySubprocessor.cxx:2
 AliMUONOccupancySubprocessor.cxx:3
 AliMUONOccupancySubprocessor.cxx:4
 AliMUONOccupancySubprocessor.cxx:5
 AliMUONOccupancySubprocessor.cxx:6
 AliMUONOccupancySubprocessor.cxx:7
 AliMUONOccupancySubprocessor.cxx:8
 AliMUONOccupancySubprocessor.cxx:9
 AliMUONOccupancySubprocessor.cxx:10
 AliMUONOccupancySubprocessor.cxx:11
 AliMUONOccupancySubprocessor.cxx:12
 AliMUONOccupancySubprocessor.cxx:13
 AliMUONOccupancySubprocessor.cxx:14
 AliMUONOccupancySubprocessor.cxx:15
 AliMUONOccupancySubprocessor.cxx:16
 AliMUONOccupancySubprocessor.cxx:17
 AliMUONOccupancySubprocessor.cxx:18
 AliMUONOccupancySubprocessor.cxx:19
 AliMUONOccupancySubprocessor.cxx:20
 AliMUONOccupancySubprocessor.cxx:21
 AliMUONOccupancySubprocessor.cxx:22
 AliMUONOccupancySubprocessor.cxx:23
 AliMUONOccupancySubprocessor.cxx:24
 AliMUONOccupancySubprocessor.cxx:25
 AliMUONOccupancySubprocessor.cxx:26
 AliMUONOccupancySubprocessor.cxx:27
 AliMUONOccupancySubprocessor.cxx:28
 AliMUONOccupancySubprocessor.cxx:29
 AliMUONOccupancySubprocessor.cxx:30
 AliMUONOccupancySubprocessor.cxx:31
 AliMUONOccupancySubprocessor.cxx:32
 AliMUONOccupancySubprocessor.cxx:33
 AliMUONOccupancySubprocessor.cxx:34
 AliMUONOccupancySubprocessor.cxx:35
 AliMUONOccupancySubprocessor.cxx:36
 AliMUONOccupancySubprocessor.cxx:37
 AliMUONOccupancySubprocessor.cxx:38
 AliMUONOccupancySubprocessor.cxx:39
 AliMUONOccupancySubprocessor.cxx:40
 AliMUONOccupancySubprocessor.cxx:41
 AliMUONOccupancySubprocessor.cxx:42
 AliMUONOccupancySubprocessor.cxx:43
 AliMUONOccupancySubprocessor.cxx:44
 AliMUONOccupancySubprocessor.cxx:45
 AliMUONOccupancySubprocessor.cxx:46
 AliMUONOccupancySubprocessor.cxx:47
 AliMUONOccupancySubprocessor.cxx:48
 AliMUONOccupancySubprocessor.cxx:49
 AliMUONOccupancySubprocessor.cxx:50
 AliMUONOccupancySubprocessor.cxx:51
 AliMUONOccupancySubprocessor.cxx:52
 AliMUONOccupancySubprocessor.cxx:53
 AliMUONOccupancySubprocessor.cxx:54
 AliMUONOccupancySubprocessor.cxx:55
 AliMUONOccupancySubprocessor.cxx:56
 AliMUONOccupancySubprocessor.cxx:57
 AliMUONOccupancySubprocessor.cxx:58
 AliMUONOccupancySubprocessor.cxx:59
 AliMUONOccupancySubprocessor.cxx:60
 AliMUONOccupancySubprocessor.cxx:61
 AliMUONOccupancySubprocessor.cxx:62
 AliMUONOccupancySubprocessor.cxx:63
 AliMUONOccupancySubprocessor.cxx:64
 AliMUONOccupancySubprocessor.cxx:65
 AliMUONOccupancySubprocessor.cxx:66
 AliMUONOccupancySubprocessor.cxx:67
 AliMUONOccupancySubprocessor.cxx:68
 AliMUONOccupancySubprocessor.cxx:69
 AliMUONOccupancySubprocessor.cxx:70
 AliMUONOccupancySubprocessor.cxx:71
 AliMUONOccupancySubprocessor.cxx:72
 AliMUONOccupancySubprocessor.cxx:73
 AliMUONOccupancySubprocessor.cxx:74
 AliMUONOccupancySubprocessor.cxx:75
 AliMUONOccupancySubprocessor.cxx:76
 AliMUONOccupancySubprocessor.cxx:77
 AliMUONOccupancySubprocessor.cxx:78
 AliMUONOccupancySubprocessor.cxx:79
 AliMUONOccupancySubprocessor.cxx:80
 AliMUONOccupancySubprocessor.cxx:81
 AliMUONOccupancySubprocessor.cxx:82
 AliMUONOccupancySubprocessor.cxx:83
 AliMUONOccupancySubprocessor.cxx:84
 AliMUONOccupancySubprocessor.cxx:85
 AliMUONOccupancySubprocessor.cxx:86
 AliMUONOccupancySubprocessor.cxx:87
 AliMUONOccupancySubprocessor.cxx:88
 AliMUONOccupancySubprocessor.cxx:89
 AliMUONOccupancySubprocessor.cxx:90
 AliMUONOccupancySubprocessor.cxx:91
 AliMUONOccupancySubprocessor.cxx:92
 AliMUONOccupancySubprocessor.cxx:93
 AliMUONOccupancySubprocessor.cxx:94
 AliMUONOccupancySubprocessor.cxx:95
 AliMUONOccupancySubprocessor.cxx:96
 AliMUONOccupancySubprocessor.cxx:97
 AliMUONOccupancySubprocessor.cxx:98
 AliMUONOccupancySubprocessor.cxx:99
 AliMUONOccupancySubprocessor.cxx:100
 AliMUONOccupancySubprocessor.cxx:101
 AliMUONOccupancySubprocessor.cxx:102
 AliMUONOccupancySubprocessor.cxx:103
 AliMUONOccupancySubprocessor.cxx:104
 AliMUONOccupancySubprocessor.cxx:105
 AliMUONOccupancySubprocessor.cxx:106
 AliMUONOccupancySubprocessor.cxx:107
 AliMUONOccupancySubprocessor.cxx:108
 AliMUONOccupancySubprocessor.cxx:109
 AliMUONOccupancySubprocessor.cxx:110
 AliMUONOccupancySubprocessor.cxx:111
 AliMUONOccupancySubprocessor.cxx:112
 AliMUONOccupancySubprocessor.cxx:113
 AliMUONOccupancySubprocessor.cxx:114
 AliMUONOccupancySubprocessor.cxx:115
 AliMUONOccupancySubprocessor.cxx:116
 AliMUONOccupancySubprocessor.cxx:117
 AliMUONOccupancySubprocessor.cxx:118
 AliMUONOccupancySubprocessor.cxx:119
 AliMUONOccupancySubprocessor.cxx:120
 AliMUONOccupancySubprocessor.cxx:121
 AliMUONOccupancySubprocessor.cxx:122
 AliMUONOccupancySubprocessor.cxx:123
 AliMUONOccupancySubprocessor.cxx:124
 AliMUONOccupancySubprocessor.cxx:125
 AliMUONOccupancySubprocessor.cxx:126
 AliMUONOccupancySubprocessor.cxx:127
 AliMUONOccupancySubprocessor.cxx:128
 AliMUONOccupancySubprocessor.cxx:129
 AliMUONOccupancySubprocessor.cxx:130
 AliMUONOccupancySubprocessor.cxx:131
 AliMUONOccupancySubprocessor.cxx:132
 AliMUONOccupancySubprocessor.cxx:133
 AliMUONOccupancySubprocessor.cxx:134
 AliMUONOccupancySubprocessor.cxx:135
 AliMUONOccupancySubprocessor.cxx:136
 AliMUONOccupancySubprocessor.cxx:137
 AliMUONOccupancySubprocessor.cxx:138
 AliMUONOccupancySubprocessor.cxx:139
 AliMUONOccupancySubprocessor.cxx:140
 AliMUONOccupancySubprocessor.cxx:141
 AliMUONOccupancySubprocessor.cxx:142
 AliMUONOccupancySubprocessor.cxx:143
 AliMUONOccupancySubprocessor.cxx:144
 AliMUONOccupancySubprocessor.cxx:145
 AliMUONOccupancySubprocessor.cxx:146
 AliMUONOccupancySubprocessor.cxx:147
 AliMUONOccupancySubprocessor.cxx:148
 AliMUONOccupancySubprocessor.cxx:149
 AliMUONOccupancySubprocessor.cxx:150
 AliMUONOccupancySubprocessor.cxx:151
 AliMUONOccupancySubprocessor.cxx:152
 AliMUONOccupancySubprocessor.cxx:153
 AliMUONOccupancySubprocessor.cxx:154
 AliMUONOccupancySubprocessor.cxx:155
 AliMUONOccupancySubprocessor.cxx:156
 AliMUONOccupancySubprocessor.cxx:157
 AliMUONOccupancySubprocessor.cxx:158
 AliMUONOccupancySubprocessor.cxx:159
 AliMUONOccupancySubprocessor.cxx:160
 AliMUONOccupancySubprocessor.cxx:161
 AliMUONOccupancySubprocessor.cxx:162
 AliMUONOccupancySubprocessor.cxx:163
 AliMUONOccupancySubprocessor.cxx:164
 AliMUONOccupancySubprocessor.cxx:165
 AliMUONOccupancySubprocessor.cxx:166
 AliMUONOccupancySubprocessor.cxx:167
 AliMUONOccupancySubprocessor.cxx:168
 AliMUONOccupancySubprocessor.cxx:169
 AliMUONOccupancySubprocessor.cxx:170