ROOT logo
//
// Class AliMixInfo
//
// AliMixInfo object contains information about one cut on for event mixing
// available for users containing mixing information
//
// authors:
//          Martin Vala (martin.vala@cern.ch)
//

#include <TList.h>
#include <TPad.h>
#include <TROOT.h>
#include <TFile.h>
#include <TH1.h>
#include <TH2.h>
#include <TProfile.h>
#include <TStyle.h>
#include <TLegend.h>
#include <TPavesText.h>
#include <TCanvas.h>

#include "AliLog.h"

#include "AliMixInfo.h"
#include "AliMixEventPool.h"
#include "AliMixEventCutObj.h"

ClassImp(AliMixInfo)

//_________________________________________________________________________________________________
AliMixInfo::AliMixInfo(const char *name, const char *title) :
   TNamed(name, title),
   fHistogramList(0)
{
   //
   // Default constructor.
   //
   AliDebug(AliLog::kDebug + 5, "<-");
   AliDebug(AliLog::kDebug + 5, "->");
}
//_________________________________________________________________________________________________
AliMixInfo::AliMixInfo(const AliMixInfo &obj) :
   TNamed(obj),
   fHistogramList(obj.fHistogramList)
{
   //
   // Copy constructor.
   //
   AliDebug(AliLog::kDebug + 5, "<-");
   AliDebug(AliLog::kDebug + 5, "->");
}
//_________________________________________________________________________________________________
AliMixInfo::~AliMixInfo()
{
   //
   // Destructor
   //
}

//_________________________________________________________________________________________________
void AliMixInfo::CreateHistogram(AliMixInfo::EInfoHistorgramType type, Int_t nbins, Int_t min, Int_t max)
{
   //
   // Create mix info histograms
   //
   if (!fHistogramList) {
      fHistogramList = new TList;
      fHistogramList->SetOwner(kTRUE);
   }
   TH1I *hist = (TH1I *) fHistogramList->FindObject(GetNameHistogramByType(type));
   if (hist) return;
   hist = new TH1I(GetNameHistogramByType(type), GetTitleHistogramByType(type), nbins, min, max);
   fHistogramList->Add(hist);
}

//_________________________________________________________________________________________________
void AliMixInfo::FillHistogram(AliMixInfo::EInfoHistorgramType type, Int_t value)
{
   //
   // Create mix info histograms
   //
   if (type == kMixedEvents && value < 0) return;
   if (!fHistogramList) {
      AliError("fHistogramList is null");
      return;
   }
   TH1I *hist = (TH1I *) fHistogramList->FindObject(GetNameHistogramByType(type));
   if (hist) {
      hist->Fill(value);
      AliDebug(AliLog::kDebug, Form("%s was filled with %d sum is %.0f", GetNameHistogramByType(type), value, hist->GetBinContent(value)));
   } else {
      AliError(Form("Problem filling histogram %s", GetNameHistogramByType(type)));
   }
}

//_________________________________________________________________________________________________
const char *AliMixInfo::GetNameHistogramByType(Int_t index) const
{
   //
   // Retruns name of cut
   //
   switch (index) {
      case kMainEvents:
         return "hMainEvents";
      case kMixedEvents:
         return "hMixedEvents";
   }
   return "";
}

//_________________________________________________________________________________________________
const char *AliMixInfo::GetTitleHistogramByType(Int_t index) const
{
   //
   // Retruns name of cut
   //
   switch (index) {
      case kMainEvents:
         return "Main Events";
      case kMixedEvents:
         return "Mixed Events";
   }
   return "";
}

//_________________________________________________________________________________________________
void AliMixInfo::Print(Option_t *option) const
{
   //
   // Print Mix info
   //
   if (!fHistogramList) return;
   if (option)
      AliInfo(Form("Name %s with option is %s", GetName(), option));
   TIter next(fHistogramList);
   TH1I *h = 0;
   for (Int_t i = 0; i < fHistogramList->GetEntries(); i++) {
      h = dynamic_cast<TH1I *>(fHistogramList->At(i));
      if (h) {
         h->Print();
         continue;
      }
   }
}
//_________________________________________________________________________________________________
void AliMixInfo::Draw(Option_t *option)
{
   //
   // Drwas mixi info canvas
   //
   if (!fHistogramList) return;

   // creating main canvas
   TCanvas *cMain = new TCanvas("cMain", "Mixing Info", 500, 500);
   if (!cMain) return;
   cMain->Divide(1, 2, 0.001, 0.001);
   cMain->cd(1);
//     TVirtualPad *upperPad = cMain->cd(1);
//     upperPad->Divide(2,1);
//     TVirtualPad *upperPad1 = gPad->cd(2);
//     upperPad1->Divide(1,2);
//     upperPad1->cd(1);
   TPavesText *text = new TPavesText(0.05, 0.05, 0.95, 0.95, 1);
   text->SetName("mixInfoText");
   text->AddText("Help:");
   text->AddText("Move over histogram to see mix info for different bins");
   text->Draw();

   // gets corresponding histograms
   TH1I *hMain = GetHistogramByType(kMainEvents);
   if (!hMain) {
      AliError("hMain is null");
      return;
   }
   TH1I *hMix =  GetHistogramByType(kMixedEvents);
   if (!hMix) {
      AliError("hMix is null");
      return;
   }


   TH2I *hMixInfo2D = 0;
//     TH1I *hOK=0,*hBad=0;
   AliMixEventPool *evPool = (AliMixEventPool *) GetEventPool("mixEventPool");
   if (evPool) {
      Int_t mixNum = evPool->GetMixNumber();
      Int_t bufferSize = evPool->GetBufferSize();
//         hOK = (TH1I *) hMain->Clone();
//         hBad = (TH1I *) hMain->Clone();
      if (!hMixInfo2D) hMixInfo2D = new TH2I("hMixInfo2D", "hMixInfo2D", hMain->GetXaxis()->GetNbins() + 1, hMain->GetXaxis()->GetXmin() - 1, hMain->GetXaxis()->GetXmax(), 1, 0, 1);
      for (Int_t iBin = 0; iBin < hMain->GetNbinsX() + 1; iBin++) {
         if (!iBin) {
            hMixInfo2D->SetBinContent(iBin + 1, 1, 1);
         } else if (!hMain->GetBinContent(iBin) && !hMix->GetBinContent(iBin)) {
            hMixInfo2D->SetBinContent(iBin + 1, 1, 2);
         } else if (hMix->GetBinContent(iBin) == mixNum * bufferSize * hMain->GetBinContent(iBin)) {
            hMixInfo2D->SetBinContent(iBin + 1, 1, 4);
         } else {
            hMixInfo2D->SetBinContent(iBin + 1, 1, 3);
         }
      }
   }

   TStyle *style = gStyle;
   Int_t cols[4] = { kYellow, kViolet, kRed, kGreen  };
   style->SetPalette(4, cols);
   cMain->cd(2);
//    cMain->SetGrid();
   if (hMixInfo2D) {
      hMixInfo2D->SetMaximum(4);
      hMixInfo2D->SetStats(0);
      hMixInfo2D->SetTitle("");
      hMixInfo2D->GetXaxis()->SetNdivisions(510);
      hMixInfo2D->GetYaxis()->SetNdivisions(0);
   }

   if (hMixInfo2D) hMixInfo2D->Draw(Form("COL %s", option));
//
//     TLegend *legend = new TLegend(0.55,0.65,0.76,0.82);
//     legend->AddEntry(hOK,"OK","f");
//     legend->AddEntry(hBad,"NOT OK","f");
//     legend->Draw();

   cMain->cd(2)->AddExec("dynamic", Form("AliMixInfo::DynamicExec((AliMixInfo*)0x%lx)", (ULong_t)this));
}

//_________________________________________________________________________________________________
void AliMixInfo::DynamicExec(AliMixInfo *const mixInfo)
{
   //
   // Function which is run when user move mouse over mix info
   //

   if (!mixInfo) return;

   TObject *select = gPad->GetSelected();
   if (!select) return;
   if (!select->InheritsFrom(TH2I::Class())) {
      gPad->SetUniqueID(0);
      return;
   }

   TH2I *hSelected = (TH2I *) select;
   gPad->GetCanvas()->FeedbackMode(kTRUE);

   //erase old position and draw a line at current position
   Int_t uid = gPad->GetUniqueID();
//     int pxold = gPad->GetUniqueID();
   Int_t px = gPad->GetEventX();
//     Int_t py = gPad->GetEventY();
//     float uxmin = gPad->GetUxmin();
//     float uxmax = gPad->GetUxmax();
//     float uymin = gPad->GetUymin();
//     float uymax = gPad->GetUymax();
   //     Int_t pxmin = gPad->XtoAbsPixel ( uxmin );
   //     Int_t pxmax = gPad->XtoAbsPixel ( uxmax );
   //     Int_t pymin = gPad->YtoAbsPixel ( uymin );
   //     Int_t pymax = gPad->YtoAbsPixel ( uymax );
// //     if(pxold) gVirtualX->DrawLine(pxold,pymin,pxold,pymax);
// //     else gVirtualX->DrawLine(px,pymin,px,pymax);
//     gPad->SetUniqueID ( px );

   Float_t upx = gPad->AbsPixeltoX(px);
//     Float_t upy = gPad->AbsPixeltoY(py);

   Float_t x = gPad->PadtoX(upx);
//     Float_t y = gPad->PadtoY ( upy );

   Int_t binX = hSelected->GetXaxis()->FindBin(x) - 1;
//     Int_t binY = hSelected->GetYaxis()->FindBin(y)-1;



   // return in case of same bin
   if (uid == binX) return;
//     Printf("%d %d",uid,binX);

   //create or set the new canvas cInfo
   TPaveText *text = 0;
   TVirtualPad *padsav = gPad;
   TCanvas *cInfo = (TCanvas *) gROOT->GetListOfCanvases()->FindObject("cMain");
   if (cInfo) {
      text = (TPaveText *)cInfo->GetPrimitive("mixInfoText");
      if (!text) {
         text = new TPavesText(0.05, 0.05, 0.95, 0.95, 1);
      } else {
         text->DeleteText();
      }

   } else   cInfo = new TCanvas("cInfo", "MixInfo Canvas", 510, 0, 350, 150);

   TVirtualPad *upperPad = cInfo->cd(1);
//     TVirtualPad *upperPadL = upperPad->cd(1);
//     TVirtualPad *upperPadR = upperPad->cd(2);
//     TVirtualPad *upperPadR1 = upperPadR->cd(1);
//     TVirtualPad *upperPadR2 = upperPadR->cd(2);
//     TH1I *hMain = 0;
//     TH1I *hMix = 0;


//     mixInfo->Print();
//     return;

   // gets corresponding histograms
   TH1I *hMain = mixInfo->GetHistogramByType(kMainEvents);
   if (!hMain) {
      Printf("hMain is null");
      return;
   }
   TH1I *hMix =  mixInfo->GetHistogramByType(kMixedEvents);
   if (!hMix) {
      Printf("hMix is null");
      return;
   }

   Double_t numMain = hMain->GetBinContent(binX);
   Double_t numMix = hMix->GetBinContent(binX);
   Int_t hist2DValue = (Int_t) hSelected->GetBinContent(binX + 1, 1);

//    Int_t mixNum = 1;
   if (text) {
      if (mixInfo) {
         AliMixEventPool *evPool = (AliMixEventPool *) mixInfo->GetEventPool("mixEventPool");
         if (evPool) {
//             mixNum = evPool->GetMixNumber();
            if (binX - 1 >= 0) {
               if (!evPool->SetCutValuesFromBinIndex(binX - 1)) return;
            }
            text->SetName("mixInfoText");
            text->SetTextAlign(12);
            text->SetToolTipText("Mixing Info about current binX");
            text->SetBorderSize(2);
            text->AddText(Form("binX=%d", binX));
            text->AddText(Form("numMain=%.0f", numMain));
            text->AddText(Form("numMix=%.0f", numMix));
            text->AddText(Form("BINCONTENT=%d", hist2DValue));
            TObjArray *eventCuts = evPool->GetListOfEventCuts();
            if (eventCuts) {
               TObjArrayIter next(eventCuts);
               AliMixEventCutObj *cut;
               while ((cut = (AliMixEventCutObj *) next())) {
                  if (hist2DValue > 1) text->AddText(Form("%s <%.2f,%.2f)", cut->GetCutName(), cut->GetCurrentMin(), cut->GetCurrentMax()));
                  else text->AddText(Form("%s <Out of Range>", cut->GetCutName()));
               }
            }
         }
      }
      switch (hist2DValue) {
         case 1 :
            text->SetFillColor(kYellow);
            break;
         case 2 :
            text->SetFillColor(kViolet);
            break;
         case 3 :
            text->SetFillColor(kRed);
            break;
         case 4 :
            text->SetFillColor(kGreen);
            break;
         default:
            text->SetFillColor(kWhite);
            break;
      }
      upperPad->cd();
      text->Draw();
//         upperPadR1->cd();
//         TH1D *proj1 = hSelected->ProjectionY("_xxx",binX);
//         proj1->Draw();
//         upperPadR2->cd();
//         TH1D *proj2 = hSelected->ProjectionY("_xxx",binX);
//         proj1->Draw();

   }
   cInfo->Update();
   padsav->cd();

   gPad->SetUniqueID(binX);
}

//_________________________________________________________________________________________________
Long64_t AliMixInfo::Merge(TCollection *list)
{
   //
   // Merge function
   //
   if (!list) return 0;
   TIter nxfc(list);
   AliMixInfo *mi = 0;
   Long64_t counter = 0;
   while ((mi = (AliMixInfo *) nxfc())) {
      // Do not merge with ourself
      if (mi == this) continue;
      // Make sure that it is a AliMixInfo
      if (!mi->InheritsFrom(AliMixInfo::Class())) {
         Error("Merge", "attempt to add object of class: %s to a %s", mi->ClassName(), ClassName());
         return -1;
      }
      // Merge now
      Add(mi);
      counter++;
   }
   // Done
   return counter;
}

TH1I *AliMixInfo::GetHistogramByType(Int_t index) const
{
   //
   // GetHistogramByType
   //
   return (TH1I *) fHistogramList->FindObject(GetNameHistogramByType(index));
}

//_________________________________________________________________________________________________
void AliMixInfo::Add(AliMixInfo *mi)
{
   //
   // adds AliMixInfo
   //

//    AliInfo(Form("Adding %p", mi));
   if (!mi) return;
   if (!fHistogramList) return;
   TH1I *hMain = GetHistogramByType(kMainEvents);
   if (!hMain) {
      AliError("hMain is null");
      return;
   }
   TH1I *hMix =  GetHistogramByType(kMixedEvents);
   if (!hMix) {
      AliError("hMain is null");
      return;
   }
   hMain->Add(mi->GetHistogramByType(kMainEvents));
   hMix->Add(mi->GetHistogramByType(kMixedEvents));
}

//_________________________________________________________________________________________________
void AliMixInfo::SetEventPool(AliMixEventPool *evPool)
{
   //
   // Sets event pool
   //
   if (!evPool) return;

   if (!fHistogramList) return;

   fHistogramList->Add(evPool);
}

//_________________________________________________________________________________________________
AliMixEventPool *AliMixInfo::GetEventPool(const char *name)
{
   //
   // Gets event pool
   //
   if (!fHistogramList) return 0;

   return (AliMixEventPool *) fHistogramList->FindObject(name);
}

 AliMixInfo.cxx:1
 AliMixInfo.cxx:2
 AliMixInfo.cxx:3
 AliMixInfo.cxx:4
 AliMixInfo.cxx:5
 AliMixInfo.cxx:6
 AliMixInfo.cxx:7
 AliMixInfo.cxx:8
 AliMixInfo.cxx:9
 AliMixInfo.cxx:10
 AliMixInfo.cxx:11
 AliMixInfo.cxx:12
 AliMixInfo.cxx:13
 AliMixInfo.cxx:14
 AliMixInfo.cxx:15
 AliMixInfo.cxx:16
 AliMixInfo.cxx:17
 AliMixInfo.cxx:18
 AliMixInfo.cxx:19
 AliMixInfo.cxx:20
 AliMixInfo.cxx:21
 AliMixInfo.cxx:22
 AliMixInfo.cxx:23
 AliMixInfo.cxx:24
 AliMixInfo.cxx:25
 AliMixInfo.cxx:26
 AliMixInfo.cxx:27
 AliMixInfo.cxx:28
 AliMixInfo.cxx:29
 AliMixInfo.cxx:30
 AliMixInfo.cxx:31
 AliMixInfo.cxx:32
 AliMixInfo.cxx:33
 AliMixInfo.cxx:34
 AliMixInfo.cxx:35
 AliMixInfo.cxx:36
 AliMixInfo.cxx:37
 AliMixInfo.cxx:38
 AliMixInfo.cxx:39
 AliMixInfo.cxx:40
 AliMixInfo.cxx:41
 AliMixInfo.cxx:42
 AliMixInfo.cxx:43
 AliMixInfo.cxx:44
 AliMixInfo.cxx:45
 AliMixInfo.cxx:46
 AliMixInfo.cxx:47
 AliMixInfo.cxx:48
 AliMixInfo.cxx:49
 AliMixInfo.cxx:50
 AliMixInfo.cxx:51
 AliMixInfo.cxx:52
 AliMixInfo.cxx:53
 AliMixInfo.cxx:54
 AliMixInfo.cxx:55
 AliMixInfo.cxx:56
 AliMixInfo.cxx:57
 AliMixInfo.cxx:58
 AliMixInfo.cxx:59
 AliMixInfo.cxx:60
 AliMixInfo.cxx:61
 AliMixInfo.cxx:62
 AliMixInfo.cxx:63
 AliMixInfo.cxx:64
 AliMixInfo.cxx:65
 AliMixInfo.cxx:66
 AliMixInfo.cxx:67
 AliMixInfo.cxx:68
 AliMixInfo.cxx:69
 AliMixInfo.cxx:70
 AliMixInfo.cxx:71
 AliMixInfo.cxx:72
 AliMixInfo.cxx:73
 AliMixInfo.cxx:74
 AliMixInfo.cxx:75
 AliMixInfo.cxx:76
 AliMixInfo.cxx:77
 AliMixInfo.cxx:78
 AliMixInfo.cxx:79
 AliMixInfo.cxx:80
 AliMixInfo.cxx:81
 AliMixInfo.cxx:82
 AliMixInfo.cxx:83
 AliMixInfo.cxx:84
 AliMixInfo.cxx:85
 AliMixInfo.cxx:86
 AliMixInfo.cxx:87
 AliMixInfo.cxx:88
 AliMixInfo.cxx:89
 AliMixInfo.cxx:90
 AliMixInfo.cxx:91
 AliMixInfo.cxx:92
 AliMixInfo.cxx:93
 AliMixInfo.cxx:94
 AliMixInfo.cxx:95
 AliMixInfo.cxx:96
 AliMixInfo.cxx:97
 AliMixInfo.cxx:98
 AliMixInfo.cxx:99
 AliMixInfo.cxx:100
 AliMixInfo.cxx:101
 AliMixInfo.cxx:102
 AliMixInfo.cxx:103
 AliMixInfo.cxx:104
 AliMixInfo.cxx:105
 AliMixInfo.cxx:106
 AliMixInfo.cxx:107
 AliMixInfo.cxx:108
 AliMixInfo.cxx:109
 AliMixInfo.cxx:110
 AliMixInfo.cxx:111
 AliMixInfo.cxx:112
 AliMixInfo.cxx:113
 AliMixInfo.cxx:114
 AliMixInfo.cxx:115
 AliMixInfo.cxx:116
 AliMixInfo.cxx:117
 AliMixInfo.cxx:118
 AliMixInfo.cxx:119
 AliMixInfo.cxx:120
 AliMixInfo.cxx:121
 AliMixInfo.cxx:122
 AliMixInfo.cxx:123
 AliMixInfo.cxx:124
 AliMixInfo.cxx:125
 AliMixInfo.cxx:126
 AliMixInfo.cxx:127
 AliMixInfo.cxx:128
 AliMixInfo.cxx:129
 AliMixInfo.cxx:130
 AliMixInfo.cxx:131
 AliMixInfo.cxx:132
 AliMixInfo.cxx:133
 AliMixInfo.cxx:134
 AliMixInfo.cxx:135
 AliMixInfo.cxx:136
 AliMixInfo.cxx:137
 AliMixInfo.cxx:138
 AliMixInfo.cxx:139
 AliMixInfo.cxx:140
 AliMixInfo.cxx:141
 AliMixInfo.cxx:142
 AliMixInfo.cxx:143
 AliMixInfo.cxx:144
 AliMixInfo.cxx:145
 AliMixInfo.cxx:146
 AliMixInfo.cxx:147
 AliMixInfo.cxx:148
 AliMixInfo.cxx:149
 AliMixInfo.cxx:150
 AliMixInfo.cxx:151
 AliMixInfo.cxx:152
 AliMixInfo.cxx:153
 AliMixInfo.cxx:154
 AliMixInfo.cxx:155
 AliMixInfo.cxx:156
 AliMixInfo.cxx:157
 AliMixInfo.cxx:158
 AliMixInfo.cxx:159
 AliMixInfo.cxx:160
 AliMixInfo.cxx:161
 AliMixInfo.cxx:162
 AliMixInfo.cxx:163
 AliMixInfo.cxx:164
 AliMixInfo.cxx:165
 AliMixInfo.cxx:166
 AliMixInfo.cxx:167
 AliMixInfo.cxx:168
 AliMixInfo.cxx:169
 AliMixInfo.cxx:170
 AliMixInfo.cxx:171
 AliMixInfo.cxx:172
 AliMixInfo.cxx:173
 AliMixInfo.cxx:174
 AliMixInfo.cxx:175
 AliMixInfo.cxx:176
 AliMixInfo.cxx:177
 AliMixInfo.cxx:178
 AliMixInfo.cxx:179
 AliMixInfo.cxx:180
 AliMixInfo.cxx:181
 AliMixInfo.cxx:182
 AliMixInfo.cxx:183
 AliMixInfo.cxx:184
 AliMixInfo.cxx:185
 AliMixInfo.cxx:186
 AliMixInfo.cxx:187
 AliMixInfo.cxx:188
 AliMixInfo.cxx:189
 AliMixInfo.cxx:190
 AliMixInfo.cxx:191
 AliMixInfo.cxx:192
 AliMixInfo.cxx:193
 AliMixInfo.cxx:194
 AliMixInfo.cxx:195
 AliMixInfo.cxx:196
 AliMixInfo.cxx:197
 AliMixInfo.cxx:198
 AliMixInfo.cxx:199
 AliMixInfo.cxx:200
 AliMixInfo.cxx:201
 AliMixInfo.cxx:202
 AliMixInfo.cxx:203
 AliMixInfo.cxx:204
 AliMixInfo.cxx:205
 AliMixInfo.cxx:206
 AliMixInfo.cxx:207
 AliMixInfo.cxx:208
 AliMixInfo.cxx:209
 AliMixInfo.cxx:210
 AliMixInfo.cxx:211
 AliMixInfo.cxx:212
 AliMixInfo.cxx:213
 AliMixInfo.cxx:214
 AliMixInfo.cxx:215
 AliMixInfo.cxx:216
 AliMixInfo.cxx:217
 AliMixInfo.cxx:218
 AliMixInfo.cxx:219
 AliMixInfo.cxx:220
 AliMixInfo.cxx:221
 AliMixInfo.cxx:222
 AliMixInfo.cxx:223
 AliMixInfo.cxx:224
 AliMixInfo.cxx:225
 AliMixInfo.cxx:226
 AliMixInfo.cxx:227
 AliMixInfo.cxx:228
 AliMixInfo.cxx:229
 AliMixInfo.cxx:230
 AliMixInfo.cxx:231
 AliMixInfo.cxx:232
 AliMixInfo.cxx:233
 AliMixInfo.cxx:234
 AliMixInfo.cxx:235
 AliMixInfo.cxx:236
 AliMixInfo.cxx:237
 AliMixInfo.cxx:238
 AliMixInfo.cxx:239
 AliMixInfo.cxx:240
 AliMixInfo.cxx:241
 AliMixInfo.cxx:242
 AliMixInfo.cxx:243
 AliMixInfo.cxx:244
 AliMixInfo.cxx:245
 AliMixInfo.cxx:246
 AliMixInfo.cxx:247
 AliMixInfo.cxx:248
 AliMixInfo.cxx:249
 AliMixInfo.cxx:250
 AliMixInfo.cxx:251
 AliMixInfo.cxx:252
 AliMixInfo.cxx:253
 AliMixInfo.cxx:254
 AliMixInfo.cxx:255
 AliMixInfo.cxx:256
 AliMixInfo.cxx:257
 AliMixInfo.cxx:258
 AliMixInfo.cxx:259
 AliMixInfo.cxx:260
 AliMixInfo.cxx:261
 AliMixInfo.cxx:262
 AliMixInfo.cxx:263
 AliMixInfo.cxx:264
 AliMixInfo.cxx:265
 AliMixInfo.cxx:266
 AliMixInfo.cxx:267
 AliMixInfo.cxx:268
 AliMixInfo.cxx:269
 AliMixInfo.cxx:270
 AliMixInfo.cxx:271
 AliMixInfo.cxx:272
 AliMixInfo.cxx:273
 AliMixInfo.cxx:274
 AliMixInfo.cxx:275
 AliMixInfo.cxx:276
 AliMixInfo.cxx:277
 AliMixInfo.cxx:278
 AliMixInfo.cxx:279
 AliMixInfo.cxx:280
 AliMixInfo.cxx:281
 AliMixInfo.cxx:282
 AliMixInfo.cxx:283
 AliMixInfo.cxx:284
 AliMixInfo.cxx:285
 AliMixInfo.cxx:286
 AliMixInfo.cxx:287
 AliMixInfo.cxx:288
 AliMixInfo.cxx:289
 AliMixInfo.cxx:290
 AliMixInfo.cxx:291
 AliMixInfo.cxx:292
 AliMixInfo.cxx:293
 AliMixInfo.cxx:294
 AliMixInfo.cxx:295
 AliMixInfo.cxx:296
 AliMixInfo.cxx:297
 AliMixInfo.cxx:298
 AliMixInfo.cxx:299
 AliMixInfo.cxx:300
 AliMixInfo.cxx:301
 AliMixInfo.cxx:302
 AliMixInfo.cxx:303
 AliMixInfo.cxx:304
 AliMixInfo.cxx:305
 AliMixInfo.cxx:306
 AliMixInfo.cxx:307
 AliMixInfo.cxx:308
 AliMixInfo.cxx:309
 AliMixInfo.cxx:310
 AliMixInfo.cxx:311
 AliMixInfo.cxx:312
 AliMixInfo.cxx:313
 AliMixInfo.cxx:314
 AliMixInfo.cxx:315
 AliMixInfo.cxx:316
 AliMixInfo.cxx:317
 AliMixInfo.cxx:318
 AliMixInfo.cxx:319
 AliMixInfo.cxx:320
 AliMixInfo.cxx:321
 AliMixInfo.cxx:322
 AliMixInfo.cxx:323
 AliMixInfo.cxx:324
 AliMixInfo.cxx:325
 AliMixInfo.cxx:326
 AliMixInfo.cxx:327
 AliMixInfo.cxx:328
 AliMixInfo.cxx:329
 AliMixInfo.cxx:330
 AliMixInfo.cxx:331
 AliMixInfo.cxx:332
 AliMixInfo.cxx:333
 AliMixInfo.cxx:334
 AliMixInfo.cxx:335
 AliMixInfo.cxx:336
 AliMixInfo.cxx:337
 AliMixInfo.cxx:338
 AliMixInfo.cxx:339
 AliMixInfo.cxx:340
 AliMixInfo.cxx:341
 AliMixInfo.cxx:342
 AliMixInfo.cxx:343
 AliMixInfo.cxx:344
 AliMixInfo.cxx:345
 AliMixInfo.cxx:346
 AliMixInfo.cxx:347
 AliMixInfo.cxx:348
 AliMixInfo.cxx:349
 AliMixInfo.cxx:350
 AliMixInfo.cxx:351
 AliMixInfo.cxx:352
 AliMixInfo.cxx:353
 AliMixInfo.cxx:354
 AliMixInfo.cxx:355
 AliMixInfo.cxx:356
 AliMixInfo.cxx:357
 AliMixInfo.cxx:358
 AliMixInfo.cxx:359
 AliMixInfo.cxx:360
 AliMixInfo.cxx:361
 AliMixInfo.cxx:362
 AliMixInfo.cxx:363
 AliMixInfo.cxx:364
 AliMixInfo.cxx:365
 AliMixInfo.cxx:366
 AliMixInfo.cxx:367
 AliMixInfo.cxx:368
 AliMixInfo.cxx:369
 AliMixInfo.cxx:370
 AliMixInfo.cxx:371
 AliMixInfo.cxx:372
 AliMixInfo.cxx:373
 AliMixInfo.cxx:374
 AliMixInfo.cxx:375
 AliMixInfo.cxx:376
 AliMixInfo.cxx:377
 AliMixInfo.cxx:378
 AliMixInfo.cxx:379
 AliMixInfo.cxx:380
 AliMixInfo.cxx:381
 AliMixInfo.cxx:382
 AliMixInfo.cxx:383
 AliMixInfo.cxx:384
 AliMixInfo.cxx:385
 AliMixInfo.cxx:386
 AliMixInfo.cxx:387
 AliMixInfo.cxx:388
 AliMixInfo.cxx:389
 AliMixInfo.cxx:390
 AliMixInfo.cxx:391
 AliMixInfo.cxx:392
 AliMixInfo.cxx:393
 AliMixInfo.cxx:394
 AliMixInfo.cxx:395
 AliMixInfo.cxx:396
 AliMixInfo.cxx:397
 AliMixInfo.cxx:398
 AliMixInfo.cxx:399
 AliMixInfo.cxx:400
 AliMixInfo.cxx:401
 AliMixInfo.cxx:402
 AliMixInfo.cxx:403
 AliMixInfo.cxx:404
 AliMixInfo.cxx:405
 AliMixInfo.cxx:406
 AliMixInfo.cxx:407
 AliMixInfo.cxx:408
 AliMixInfo.cxx:409
 AliMixInfo.cxx:410
 AliMixInfo.cxx:411
 AliMixInfo.cxx:412
 AliMixInfo.cxx:413
 AliMixInfo.cxx:414
 AliMixInfo.cxx:415
 AliMixInfo.cxx:416
 AliMixInfo.cxx:417
 AliMixInfo.cxx:418
 AliMixInfo.cxx:419
 AliMixInfo.cxx:420
 AliMixInfo.cxx:421
 AliMixInfo.cxx:422
 AliMixInfo.cxx:423
 AliMixInfo.cxx:424
 AliMixInfo.cxx:425
 AliMixInfo.cxx:426
 AliMixInfo.cxx:427
 AliMixInfo.cxx:428
 AliMixInfo.cxx:429
 AliMixInfo.cxx:430
 AliMixInfo.cxx:431
 AliMixInfo.cxx:432
 AliMixInfo.cxx:433
 AliMixInfo.cxx:434
 AliMixInfo.cxx:435
 AliMixInfo.cxx:436
 AliMixInfo.cxx:437
 AliMixInfo.cxx:438
 AliMixInfo.cxx:439
 AliMixInfo.cxx:440
 AliMixInfo.cxx:441
 AliMixInfo.cxx:442
 AliMixInfo.cxx:443
 AliMixInfo.cxx:444
 AliMixInfo.cxx:445
 AliMixInfo.cxx:446
 AliMixInfo.cxx:447
 AliMixInfo.cxx:448
 AliMixInfo.cxx:449
 AliMixInfo.cxx:450
 AliMixInfo.cxx:451
 AliMixInfo.cxx:452
 AliMixInfo.cxx:453
 AliMixInfo.cxx:454
 AliMixInfo.cxx:455
 AliMixInfo.cxx:456
 AliMixInfo.cxx:457
 AliMixInfo.cxx:458
 AliMixInfo.cxx:459
 AliMixInfo.cxx:460
 AliMixInfo.cxx:461
 AliMixInfo.cxx:462
 AliMixInfo.cxx:463