ROOT logo
////////////////////////////////////////////////////////////////////////////
//                                                                        //
//  Trend Value Manager                                                   //
//                                                                        //
//  Mediates interaction with DB (OCDB ?!)                                //                                                                      //                                                                        //
//  Authors:                                                              //
//    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

#include "TFile.h"
#include "TKey.h"
#include "TObjArray.h"
#include "TH1F.h"
#include "TAxis.h"
#include "TGraphErrors.h"
#include "TLine.h"
#include "TCanvas.h"
#include "TString.h"

#include "AliLog.h"
#include "AliTRDtrendingManager.h"

ClassImp(AliTRDtrendingManager)

AliTRDtrendingManager* AliTRDtrendingManager::fgInstance=NULL;
//Bool_t AliTRDtrendingManager::fgTerminated = kFALSE;

//____________________________________________
AliTRDtrendingManager* AliTRDtrendingManager::Instance()
{
  //
  // Singleton implementation
  // Returns an instance of this class, it is created if neccessary
  //
//   if (fgTerminated) return NULL;
  if (!fgInstance) fgInstance = new AliTRDtrendingManager();
  return fgInstance;
}

//____________________________________________
void AliTRDtrendingManager::Terminate()
{
  //
  // Singleton implementation
  // Deletes the instance of this class and sets the terminated flag,
  // instances cannot be requested anymore
  // This function can be called several times.
  //
  
/*  fgTerminated = kTRUE;*/
  if (fgInstance != NULL) {
    if(TFile::Open("TRD.Trend.root", "RECREATE")){
      if(fEntries) fEntries->Write();
      gFile->Close();
    }
    delete fgInstance; fgInstance = NULL;
  }
}

//____________________________________________
AliTRDtrendingManager::AliTRDtrendingManager() 
  : TObject()
  ,fEntries(NULL)
{
// Constructor
}

//____________________________________________
AliTRDtrendingManager::~AliTRDtrendingManager()
{
// Destructor
  if(fEntries){
    fEntries->Delete();
    delete fEntries;
  }
}

//____________________________________________
void AliTRDtrendingManager::AddValue(
   const Char_t *name
  ,Double_t mean,Double_t sigm
  ,const Char_t *title
  ,const Char_t *responsible
  ,const Char_t *notifiables
  ,Char_t **messages
  )
{
// Expert Function !!!
// Add a trend value to the map already loaded
// If no map loaded create a new one from scratch
//
// class_name : name of the performance task 
// name       : name of the value to be trended
// title      : description of the value to be trended
// messages   : array of alarm messages for each alarm level
// responsible: name and email of the responsible person. Format "name/email"
// notifiables: name and email of the notifiable persons. Format "name1/email1, name2/email2, etc"
//

  if(!fEntries){ // if no trending map defined create one
    AliDebug(1, "No trending map loaded. Create one from scratch.");
    MakeList(1000);
  }

  if(GetValue(name)){
    AliInfo(Form("Trend value \"%s\" already in list. Use Modify function", name));
    return;
  }
  // create new trending value`
  AliTRDtrendValue *fValue = new AliTRDtrendValue(name, title?title:"");
  fValue->Set(mean, sigm);
  if(messages) for(Int_t ilevel(AliTRDtrendValue::kNlevels); ilevel--;) if(messages[ilevel]) fValue->SetAlarm(ilevel, messages[ilevel]);
  TObjArray *r(NULL);
  if(responsible){
    TString s(responsible);
    r=s.Tokenize("/");
    if(r->GetEntriesFast()!=2){
      AliWarning("Responsible name/email incorrectly formated.");
    } else {
      fValue->SetResponsible(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
    }
    r->Delete(); delete r;
  }
  if(notifiables){
    TString s(notifiables);
    TObjArray *n=s.Tokenize(",");
    for(Int_t in(0); in<TMath::Min(AliTRDtrendValue::kNnotifiable, n->GetEntriesFast()); in++){
      TString ss(((TObjString*)n->At(in))->String());
      r=ss.Tokenize("/");
      if(r->GetEntriesFast()!=2){
        AliWarning(Form("Notifiable person name/email incorrectly formated for [%s].", ss.Data()));
      } else {
        fValue->SetNotifiable(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
      }
      r->Delete(); delete r;
    }
    n->Delete(); delete n;
  }
  fEntries->AddLast(fValue);
}

//____________________________________________
AliTRDtrendValue* AliTRDtrendingManager::GetValue(const Char_t *name)
{
// Search trend value list by value "name" formatted according to "class_name"
  if(!fEntries){
    AliError("No trending map defined.");
    return NULL;
  }
  return (AliTRDtrendValue*)fEntries->FindObject(name);
}

//____________________________________________
TH1* AliTRDtrendingManager::MakeTrends(const char *fileList, TObjArray *dump)
{
// Make trends with reference to DB for all trend files in "fileList".
// The DB should be loaded
  if(!fEntries){
    AliWarning("Trending map undefined");
    return NULL;
  }
  Int_t ntv(fEntries->GetEntries());

  FILE *fp(NULL);
  if(!(fp= fopen(fileList, "rt"))){
    AliWarning(Form("Can not open file list \"%s\"", fileList));
    return NULL;
  }
  Int_t *na = new Int_t[ntv]; memset(na, 0, ntv*sizeof(Int_t));
  Float_t *la = new Float_t[ntv]; memset(la, 0, ntv*sizeof(Float_t));
  Float_t *lm = new Float_t[ntv]; for(Int_t im(0); im<ntv; im++) lm[im] = 1.e5;
  Float_t *lM = new Float_t[ntv]; for(Int_t im(0); im<ntv; im++) lM[im] = -1.e5;
  TGraphErrors **g = new TGraphErrors*[ntv]; memset(g, 0, ntv*sizeof(TGraphErrors*));
  AliTRDtrendValue *TV(NULL), *tv(NULL);
  TString sfp; Int_t run[10000], nr(0);
  while(sfp.Gets(fp)){
    // guess run no from path. Do we need a more robust approach ?
    TObjArray *afp=sfp.Tokenize("/");
    Int_t idx = afp->GetEntries()-2;
    Int_t rno = ((TObjString*)(*afp)[idx])->GetString().Atoi();
    afp->Delete(); delete afp;
    if(!TFile::Open(sfp.Data())) continue;

    run[nr] = rno; Int_t nmiss(0);
    for(Int_t it(0); it<ntv; it++){
      if(!(TV = (AliTRDtrendValue*)fEntries->At(it))) continue;
      if(!(tv = (AliTRDtrendValue*)gFile->Get(TV->GetName()))) {
        AliDebug(1, Form("Missing %09d.%s", rno, TV->GetName()));
        nmiss++;
        continue;
      }
      if(tv->GetVal()<=-998. ||
         (strstr(TV->GetName(), "TRDcheckDET")&&TMath::Abs(tv->GetVal())<1.e-5) ||
         (strstr(TV->GetName(), "TRDefficiency")&&tv->GetVal()<1.e-5) ||
         (!(strcmp(TV->GetName(), "TRDcheckDET_ChargeTracklet"))&&TMath::Abs(tv->GetVal())<1.e1)) continue;
      if(IsRelativeMeanSigma()){
        (*tv)/=(*TV);
        la[it]+=tv->GetVal(); na[it]++;
      } else {
        if(tv->GetVal()<lm[it]) lm[it]=tv->GetVal();
        if(tv->GetVal()>lM[it])lM[it]=tv->GetVal();
      }
      if(!g[it]){
        g[it] = new TGraphErrors();
        g[it]->SetNameTitle(TV->GetName(), TV->GetTitle());
        g[it]->SetMarkerStyle(4);g[it]->SetMarkerSize(1.2);
        g[it]->SetLineStyle(2);g[it]->SetLineWidth(1);
      }
      Int_t ip(g[it]->GetN());
      g[it]->SetPoint(ip, nr, tv->GetVal());
      g[it]->SetPointError(ip, 0., tv->GetErr());
    }
    if(Float_t(nmiss)/ntv>.1) AliWarning(Form("Run[%09d] Missing %6.2f%% values", rno, 1.e2*nmiss/ntv));
    nr++;
  }

  // Draw
  TH1 *hT = new TH1F("hT", ";#bf{RUN};", nr, -0.5, nr-0.5);
  TAxis *ax = hT->GetXaxis(); ax->SetTitleOffset(2.6);ax->CenterTitle(); ax->SetBit(TAxis::kLabelsVert);
  TAxis *ay = hT->GetYaxis(); ay->SetTitleOffset(IsRelativeMeanSigma()?0.4:0.75);ay->CenterTitle(); ay->SetAxisColor(kRed); ay->SetDecimals();
  for(Int_t ir(0); ir<nr; ir++) ax->SetBinLabel(ir+1, Form("%09d", run[ir]));

  TLine *line(NULL);
  TCanvas *c = new TCanvas("c", "TRD Trend", 1, 1, 2400, 1000);
  c->SetLeftMargin(IsRelativeMeanSigma()?0.03666361:0.05685619);
  c->SetRightMargin(0.005499542);
  c->SetTopMargin(0.02542373);
  c->SetBottomMargin(0.1758475);
  for(Int_t it(0); it<ntv; it++){
    if(!g[it]) continue;
    c->Clear();
    if(IsRelativeMeanSigma()){
      ay->SetRangeUser(-5, 5);
      ay->SetTitle(Form("#bf{%s [#sigmau]}", g[it]->GetTitle()));
      line = new TLine(-0.5, na[it]?(la[it]/na[it]):0., nr-0.5, na[it]?(la[it]/na[it]):0.);
      line->SetLineColor(kBlue);
    } else {
      ay->SetRangeUser(lm[it]-0.1*(lM[it]-lm[it]), lM[it]+0.1*(lM[it]-lm[it]));
      ay->SetTitle(Form("#bf{%s}", g[it]->GetTitle()));
    }
    hT->Draw("p");
    g[it]->Draw("ple5");
    if(line) line->Draw();
    c->Modified(); c->Update(); c->SaveAs(Form("Trend_%s.gif", g[it]->GetName()));
    if(dump) dump->Add(g[it]);
    else delete g[it];
    if(line) delete line;
  }
  delete [] g;
  delete [] lm;
  delete [] lM;
  delete [] la;
  delete [] na;
  return hT;
}

//____________________________________________
Bool_t AliTRDtrendingManager::ModifyValue(
  const Char_t *name
  ,const Char_t *title
  ,Double_t mean, Double_t sgm
  ,Char_t **messages
  ,const Char_t *responsible
  ,const Char_t *notifiables
  )
{
// Expert Function !!!
// Modify a trend value in the map already loaded
// see function AddValue() for explanation of input format. 

  if(!fEntries){
    AliError("No trending map loaded.");
    return kFALSE;
  }
  AliWarning("*** EXPERT FUNCTION *** This function is modifying one trending value to the current DB. Continue if you know what yout do!");

  AliTRDtrendValue *fValue(NULL);
  if(!(fValue = GetValue(name))) { 
    AliError(Form("Missing trending value %s", name));
    return kFALSE;
  }  
  
  fValue->SetTitle(title);
  fValue->Set(mean, sgm);
  if(messages){ 
    for(Int_t ilevel(AliTRDtrendValue::kNlevels); ilevel--;) fValue->SetAlarm(ilevel, messages[ilevel]);
  }
  TString s;
  TObjArray *r(NULL);
  if(responsible){ 
    s=responsible;
    r=s.Tokenize("/");
    if(r->GetEntriesFast()!=2){ 
      AliWarning("Responsible name/email incorrectly formated.");
    } else { 
      fValue->SetResponsible(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
    }
    r->Delete(); delete r;
  }
  if(notifiables){
    s=notifiables;
    TObjArray *n=s.Tokenize(",");
    for(Int_t in(0); in<TMath::Min(AliTRDtrendValue::kNnotifiable, n->GetEntriesFast()); in++){
      TString ss(((TObjString*)n->At(in))->String());
      r=ss.Tokenize("/");
      if(r->GetEntriesFast()!=2){ 
        AliWarning(Form("Notifiable person name/email incorrectly formated for [%s].", ss.Data()));
      } else { 
        fValue->SetNotifiable(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
      }
      r->Delete(); delete r;
    }
    n->Delete(); delete n;
  }
  return kTRUE;
}

//____________________________________________
void AliTRDtrendingManager::Print(Option_t *o) const
{
// Dump trend value list
  if(!fEntries){
    AliError("No trending map available.");
    return;
  }

  for(Int_t iv(0); iv<fEntries->GetEntriesFast(); iv++){
    ((AliTRDtrendValue*)fEntries->At(iv))->Print(o);
  }
}

//____________________________________________
void AliTRDtrendingManager::Load(const char *fn)
{
// Load TRD trending DB from $ALICE_ROOT/PWGPP/TRD/data.

  AliDebug(1, "Loading TRD trending ...");
  if(!TFile::Open(fn)) return;

  TList *tvList = gFile->GetListOfKeys(); TIterator *iter(tvList->MakeIterator()); AliTRDtrendValue *tv(NULL);
  MakeList(tvList->GetEntries());
  TKey *ktv(NULL);
  while((ktv = (TKey*)iter->Next())){
    tv = (AliTRDtrendValue*)gFile->Get(ktv->GetName());
    fEntries->AddLast(new AliTRDtrendValue(*tv));
    delete tv;
  }
  gFile->Close();
}

//____________________________________________
void AliTRDtrendingManager::MakeList(Int_t entries)
{
// allocate trending values array
  fEntries = new TObjArray(entries);
  fEntries->SetOwner();
  fEntries->SetName("TrendValues");
}
 AliTRDtrendingManager.cxx:1
 AliTRDtrendingManager.cxx:2
 AliTRDtrendingManager.cxx:3
 AliTRDtrendingManager.cxx:4
 AliTRDtrendingManager.cxx:5
 AliTRDtrendingManager.cxx:6
 AliTRDtrendingManager.cxx:7
 AliTRDtrendingManager.cxx:8
 AliTRDtrendingManager.cxx:9
 AliTRDtrendingManager.cxx:10
 AliTRDtrendingManager.cxx:11
 AliTRDtrendingManager.cxx:12
 AliTRDtrendingManager.cxx:13
 AliTRDtrendingManager.cxx:14
 AliTRDtrendingManager.cxx:15
 AliTRDtrendingManager.cxx:16
 AliTRDtrendingManager.cxx:17
 AliTRDtrendingManager.cxx:18
 AliTRDtrendingManager.cxx:19
 AliTRDtrendingManager.cxx:20
 AliTRDtrendingManager.cxx:21
 AliTRDtrendingManager.cxx:22
 AliTRDtrendingManager.cxx:23
 AliTRDtrendingManager.cxx:24
 AliTRDtrendingManager.cxx:25
 AliTRDtrendingManager.cxx:26
 AliTRDtrendingManager.cxx:27
 AliTRDtrendingManager.cxx:28
 AliTRDtrendingManager.cxx:29
 AliTRDtrendingManager.cxx:30
 AliTRDtrendingManager.cxx:31
 AliTRDtrendingManager.cxx:32
 AliTRDtrendingManager.cxx:33
 AliTRDtrendingManager.cxx:34
 AliTRDtrendingManager.cxx:35
 AliTRDtrendingManager.cxx:36
 AliTRDtrendingManager.cxx:37
 AliTRDtrendingManager.cxx:38
 AliTRDtrendingManager.cxx:39
 AliTRDtrendingManager.cxx:40
 AliTRDtrendingManager.cxx:41
 AliTRDtrendingManager.cxx:42
 AliTRDtrendingManager.cxx:43
 AliTRDtrendingManager.cxx:44
 AliTRDtrendingManager.cxx:45
 AliTRDtrendingManager.cxx:46
 AliTRDtrendingManager.cxx:47
 AliTRDtrendingManager.cxx:48
 AliTRDtrendingManager.cxx:49
 AliTRDtrendingManager.cxx:50
 AliTRDtrendingManager.cxx:51
 AliTRDtrendingManager.cxx:52
 AliTRDtrendingManager.cxx:53
 AliTRDtrendingManager.cxx:54
 AliTRDtrendingManager.cxx:55
 AliTRDtrendingManager.cxx:56
 AliTRDtrendingManager.cxx:57
 AliTRDtrendingManager.cxx:58
 AliTRDtrendingManager.cxx:59
 AliTRDtrendingManager.cxx:60
 AliTRDtrendingManager.cxx:61
 AliTRDtrendingManager.cxx:62
 AliTRDtrendingManager.cxx:63
 AliTRDtrendingManager.cxx:64
 AliTRDtrendingManager.cxx:65
 AliTRDtrendingManager.cxx:66
 AliTRDtrendingManager.cxx:67
 AliTRDtrendingManager.cxx:68
 AliTRDtrendingManager.cxx:69
 AliTRDtrendingManager.cxx:70
 AliTRDtrendingManager.cxx:71
 AliTRDtrendingManager.cxx:72
 AliTRDtrendingManager.cxx:73
 AliTRDtrendingManager.cxx:74
 AliTRDtrendingManager.cxx:75
 AliTRDtrendingManager.cxx:76
 AliTRDtrendingManager.cxx:77
 AliTRDtrendingManager.cxx:78
 AliTRDtrendingManager.cxx:79
 AliTRDtrendingManager.cxx:80
 AliTRDtrendingManager.cxx:81
 AliTRDtrendingManager.cxx:82
 AliTRDtrendingManager.cxx:83
 AliTRDtrendingManager.cxx:84
 AliTRDtrendingManager.cxx:85
 AliTRDtrendingManager.cxx:86
 AliTRDtrendingManager.cxx:87
 AliTRDtrendingManager.cxx:88
 AliTRDtrendingManager.cxx:89
 AliTRDtrendingManager.cxx:90
 AliTRDtrendingManager.cxx:91
 AliTRDtrendingManager.cxx:92
 AliTRDtrendingManager.cxx:93
 AliTRDtrendingManager.cxx:94
 AliTRDtrendingManager.cxx:95
 AliTRDtrendingManager.cxx:96
 AliTRDtrendingManager.cxx:97
 AliTRDtrendingManager.cxx:98
 AliTRDtrendingManager.cxx:99
 AliTRDtrendingManager.cxx:100
 AliTRDtrendingManager.cxx:101
 AliTRDtrendingManager.cxx:102
 AliTRDtrendingManager.cxx:103
 AliTRDtrendingManager.cxx:104
 AliTRDtrendingManager.cxx:105
 AliTRDtrendingManager.cxx:106
 AliTRDtrendingManager.cxx:107
 AliTRDtrendingManager.cxx:108
 AliTRDtrendingManager.cxx:109
 AliTRDtrendingManager.cxx:110
 AliTRDtrendingManager.cxx:111
 AliTRDtrendingManager.cxx:112
 AliTRDtrendingManager.cxx:113
 AliTRDtrendingManager.cxx:114
 AliTRDtrendingManager.cxx:115
 AliTRDtrendingManager.cxx:116
 AliTRDtrendingManager.cxx:117
 AliTRDtrendingManager.cxx:118
 AliTRDtrendingManager.cxx:119
 AliTRDtrendingManager.cxx:120
 AliTRDtrendingManager.cxx:121
 AliTRDtrendingManager.cxx:122
 AliTRDtrendingManager.cxx:123
 AliTRDtrendingManager.cxx:124
 AliTRDtrendingManager.cxx:125
 AliTRDtrendingManager.cxx:126
 AliTRDtrendingManager.cxx:127
 AliTRDtrendingManager.cxx:128
 AliTRDtrendingManager.cxx:129
 AliTRDtrendingManager.cxx:130
 AliTRDtrendingManager.cxx:131
 AliTRDtrendingManager.cxx:132
 AliTRDtrendingManager.cxx:133
 AliTRDtrendingManager.cxx:134
 AliTRDtrendingManager.cxx:135
 AliTRDtrendingManager.cxx:136
 AliTRDtrendingManager.cxx:137
 AliTRDtrendingManager.cxx:138
 AliTRDtrendingManager.cxx:139
 AliTRDtrendingManager.cxx:140
 AliTRDtrendingManager.cxx:141
 AliTRDtrendingManager.cxx:142
 AliTRDtrendingManager.cxx:143
 AliTRDtrendingManager.cxx:144
 AliTRDtrendingManager.cxx:145
 AliTRDtrendingManager.cxx:146
 AliTRDtrendingManager.cxx:147
 AliTRDtrendingManager.cxx:148
 AliTRDtrendingManager.cxx:149
 AliTRDtrendingManager.cxx:150
 AliTRDtrendingManager.cxx:151
 AliTRDtrendingManager.cxx:152
 AliTRDtrendingManager.cxx:153
 AliTRDtrendingManager.cxx:154
 AliTRDtrendingManager.cxx:155
 AliTRDtrendingManager.cxx:156
 AliTRDtrendingManager.cxx:157
 AliTRDtrendingManager.cxx:158
 AliTRDtrendingManager.cxx:159
 AliTRDtrendingManager.cxx:160
 AliTRDtrendingManager.cxx:161
 AliTRDtrendingManager.cxx:162
 AliTRDtrendingManager.cxx:163
 AliTRDtrendingManager.cxx:164
 AliTRDtrendingManager.cxx:165
 AliTRDtrendingManager.cxx:166
 AliTRDtrendingManager.cxx:167
 AliTRDtrendingManager.cxx:168
 AliTRDtrendingManager.cxx:169
 AliTRDtrendingManager.cxx:170
 AliTRDtrendingManager.cxx:171
 AliTRDtrendingManager.cxx:172
 AliTRDtrendingManager.cxx:173
 AliTRDtrendingManager.cxx:174
 AliTRDtrendingManager.cxx:175
 AliTRDtrendingManager.cxx:176
 AliTRDtrendingManager.cxx:177
 AliTRDtrendingManager.cxx:178
 AliTRDtrendingManager.cxx:179
 AliTRDtrendingManager.cxx:180
 AliTRDtrendingManager.cxx:181
 AliTRDtrendingManager.cxx:182
 AliTRDtrendingManager.cxx:183
 AliTRDtrendingManager.cxx:184
 AliTRDtrendingManager.cxx:185
 AliTRDtrendingManager.cxx:186
 AliTRDtrendingManager.cxx:187
 AliTRDtrendingManager.cxx:188
 AliTRDtrendingManager.cxx:189
 AliTRDtrendingManager.cxx:190
 AliTRDtrendingManager.cxx:191
 AliTRDtrendingManager.cxx:192
 AliTRDtrendingManager.cxx:193
 AliTRDtrendingManager.cxx:194
 AliTRDtrendingManager.cxx:195
 AliTRDtrendingManager.cxx:196
 AliTRDtrendingManager.cxx:197
 AliTRDtrendingManager.cxx:198
 AliTRDtrendingManager.cxx:199
 AliTRDtrendingManager.cxx:200
 AliTRDtrendingManager.cxx:201
 AliTRDtrendingManager.cxx:202
 AliTRDtrendingManager.cxx:203
 AliTRDtrendingManager.cxx:204
 AliTRDtrendingManager.cxx:205
 AliTRDtrendingManager.cxx:206
 AliTRDtrendingManager.cxx:207
 AliTRDtrendingManager.cxx:208
 AliTRDtrendingManager.cxx:209
 AliTRDtrendingManager.cxx:210
 AliTRDtrendingManager.cxx:211
 AliTRDtrendingManager.cxx:212
 AliTRDtrendingManager.cxx:213
 AliTRDtrendingManager.cxx:214
 AliTRDtrendingManager.cxx:215
 AliTRDtrendingManager.cxx:216
 AliTRDtrendingManager.cxx:217
 AliTRDtrendingManager.cxx:218
 AliTRDtrendingManager.cxx:219
 AliTRDtrendingManager.cxx:220
 AliTRDtrendingManager.cxx:221
 AliTRDtrendingManager.cxx:222
 AliTRDtrendingManager.cxx:223
 AliTRDtrendingManager.cxx:224
 AliTRDtrendingManager.cxx:225
 AliTRDtrendingManager.cxx:226
 AliTRDtrendingManager.cxx:227
 AliTRDtrendingManager.cxx:228
 AliTRDtrendingManager.cxx:229
 AliTRDtrendingManager.cxx:230
 AliTRDtrendingManager.cxx:231
 AliTRDtrendingManager.cxx:232
 AliTRDtrendingManager.cxx:233
 AliTRDtrendingManager.cxx:234
 AliTRDtrendingManager.cxx:235
 AliTRDtrendingManager.cxx:236
 AliTRDtrendingManager.cxx:237
 AliTRDtrendingManager.cxx:238
 AliTRDtrendingManager.cxx:239
 AliTRDtrendingManager.cxx:240
 AliTRDtrendingManager.cxx:241
 AliTRDtrendingManager.cxx:242
 AliTRDtrendingManager.cxx:243
 AliTRDtrendingManager.cxx:244
 AliTRDtrendingManager.cxx:245
 AliTRDtrendingManager.cxx:246
 AliTRDtrendingManager.cxx:247
 AliTRDtrendingManager.cxx:248
 AliTRDtrendingManager.cxx:249
 AliTRDtrendingManager.cxx:250
 AliTRDtrendingManager.cxx:251
 AliTRDtrendingManager.cxx:252
 AliTRDtrendingManager.cxx:253
 AliTRDtrendingManager.cxx:254
 AliTRDtrendingManager.cxx:255
 AliTRDtrendingManager.cxx:256
 AliTRDtrendingManager.cxx:257
 AliTRDtrendingManager.cxx:258
 AliTRDtrendingManager.cxx:259
 AliTRDtrendingManager.cxx:260
 AliTRDtrendingManager.cxx:261
 AliTRDtrendingManager.cxx:262
 AliTRDtrendingManager.cxx:263
 AliTRDtrendingManager.cxx:264
 AliTRDtrendingManager.cxx:265
 AliTRDtrendingManager.cxx:266
 AliTRDtrendingManager.cxx:267
 AliTRDtrendingManager.cxx:268
 AliTRDtrendingManager.cxx:269
 AliTRDtrendingManager.cxx:270
 AliTRDtrendingManager.cxx:271
 AliTRDtrendingManager.cxx:272
 AliTRDtrendingManager.cxx:273
 AliTRDtrendingManager.cxx:274
 AliTRDtrendingManager.cxx:275
 AliTRDtrendingManager.cxx:276
 AliTRDtrendingManager.cxx:277
 AliTRDtrendingManager.cxx:278
 AliTRDtrendingManager.cxx:279
 AliTRDtrendingManager.cxx:280
 AliTRDtrendingManager.cxx:281
 AliTRDtrendingManager.cxx:282
 AliTRDtrendingManager.cxx:283
 AliTRDtrendingManager.cxx:284
 AliTRDtrendingManager.cxx:285
 AliTRDtrendingManager.cxx:286
 AliTRDtrendingManager.cxx:287
 AliTRDtrendingManager.cxx:288
 AliTRDtrendingManager.cxx:289
 AliTRDtrendingManager.cxx:290
 AliTRDtrendingManager.cxx:291
 AliTRDtrendingManager.cxx:292
 AliTRDtrendingManager.cxx:293
 AliTRDtrendingManager.cxx:294
 AliTRDtrendingManager.cxx:295
 AliTRDtrendingManager.cxx:296
 AliTRDtrendingManager.cxx:297
 AliTRDtrendingManager.cxx:298
 AliTRDtrendingManager.cxx:299
 AliTRDtrendingManager.cxx:300
 AliTRDtrendingManager.cxx:301
 AliTRDtrendingManager.cxx:302
 AliTRDtrendingManager.cxx:303
 AliTRDtrendingManager.cxx:304
 AliTRDtrendingManager.cxx:305
 AliTRDtrendingManager.cxx:306
 AliTRDtrendingManager.cxx:307
 AliTRDtrendingManager.cxx:308
 AliTRDtrendingManager.cxx:309
 AliTRDtrendingManager.cxx:310
 AliTRDtrendingManager.cxx:311
 AliTRDtrendingManager.cxx:312
 AliTRDtrendingManager.cxx:313
 AliTRDtrendingManager.cxx:314
 AliTRDtrendingManager.cxx:315
 AliTRDtrendingManager.cxx:316
 AliTRDtrendingManager.cxx:317
 AliTRDtrendingManager.cxx:318
 AliTRDtrendingManager.cxx:319
 AliTRDtrendingManager.cxx:320
 AliTRDtrendingManager.cxx:321
 AliTRDtrendingManager.cxx:322
 AliTRDtrendingManager.cxx:323
 AliTRDtrendingManager.cxx:324
 AliTRDtrendingManager.cxx:325
 AliTRDtrendingManager.cxx:326
 AliTRDtrendingManager.cxx:327
 AliTRDtrendingManager.cxx:328
 AliTRDtrendingManager.cxx:329
 AliTRDtrendingManager.cxx:330
 AliTRDtrendingManager.cxx:331
 AliTRDtrendingManager.cxx:332
 AliTRDtrendingManager.cxx:333
 AliTRDtrendingManager.cxx:334
 AliTRDtrendingManager.cxx:335
 AliTRDtrendingManager.cxx:336
 AliTRDtrendingManager.cxx:337
 AliTRDtrendingManager.cxx:338
 AliTRDtrendingManager.cxx:339
 AliTRDtrendingManager.cxx:340
 AliTRDtrendingManager.cxx:341
 AliTRDtrendingManager.cxx:342
 AliTRDtrendingManager.cxx:343
 AliTRDtrendingManager.cxx:344
 AliTRDtrendingManager.cxx:345
 AliTRDtrendingManager.cxx:346
 AliTRDtrendingManager.cxx:347
 AliTRDtrendingManager.cxx:348
 AliTRDtrendingManager.cxx:349
 AliTRDtrendingManager.cxx:350
 AliTRDtrendingManager.cxx:351
 AliTRDtrendingManager.cxx:352
 AliTRDtrendingManager.cxx:353
 AliTRDtrendingManager.cxx:354
 AliTRDtrendingManager.cxx:355
 AliTRDtrendingManager.cxx:356
 AliTRDtrendingManager.cxx:357
 AliTRDtrendingManager.cxx:358
 AliTRDtrendingManager.cxx:359