ROOT logo
#define NPMTs 24

int MakeTrendT0( char *infile, int run, char* ocdbStorage="raw://") {

  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCORRFW");
  gSystem->Load("libTENDER");
  gSystem->Load("libPWGPP.so");

  char *outfile = "trending.root";
 
  if(!infile) return -1;
  if(!outfile) return -1;

  TFile *f = TFile::Open(infile,"read");
  if (!f) {
    printf("File %s not available\n", infile);
    return -1;
  }

  //            LOAD HISTOGRAMS FROM QAresults.root   
  TObjArray   *fTzeroObject = (TObjArray*) f->Get("T0_Performance/QAT0chists"); 

  TH1F* fTzeroORAplusORC =(TH1F*) ((TH1F*) fTzeroObject->FindObject("fTzeroORAplusORC"))->Clone("A"); 
  TH1F* fResolution      =(TH1F*) ((TH1F*) fTzeroObject->FindObject("fResolution"))->Clone("B");
  TH1F* fTzeroORA        =(TH1F*) ((TH1F*) fTzeroObject->FindObject("fTzeroORA"))->Clone("C");
  TH1F* fTzeroORC        =(TH1F*) ((TH1F*) fTzeroObject->FindObject("fTzeroORC"))->Clone("D");

  TH2F *fTimeVSAmplitude[NPMTs];//counting PMTs from 0
  TH1D *fAmplitude[NPMTs];
  TH1D *fTime[NPMTs];
  //-----> add new histogram here  



  // sigma fit of resolution, mean T0A, T0C and T0C&A,  mean amplitude for each PMT
  double resolutionSigma = -9999; //dummy init
  double tzeroOrAPlusOrC = -9999; //dummy init
  double tzeroOrA        = -9999; //dummy init
  double tzeroOrC        = -9999; //dummy init
  double meanAmplitude[NPMTs]; //dummy init
  double meanTime[NPMTs]; //dummy init
  double timeDelayOCDB[NPMTs]; //dummy init
 
  //.................................................................................

  for(int ipmt=1; ipmt<=NPMTs; ipmt++){ //loop over all PMTs
    fTimeVSAmplitude[ipmt-1] =(TH2F*) ((TH2F*) fTzeroObject->FindObject(Form("fTimeVSAmplitude%d",ipmt)))->Clone(Form("E%d",ipmt));
    int nbinsX = fTimeVSAmplitude[ipmt-1]->GetNbinsX();
    int nbinsY = fTimeVSAmplitude[ipmt-1]->GetNbinsY();
    //Amplitude
    fAmplitude[ipmt-1] = (TH1D*) fTimeVSAmplitude[ipmt-1]->ProjectionX(Form("fAmplitude%d",ipmt), 1, nbinsY); 
    meanAmplitude[ipmt-1] = -9999; //dummy init 
    if(fAmplitude[ipmt-1]->GetEntries()>0){
      meanAmplitude[ipmt-1] = fAmplitude[ipmt-1]->GetMean();
    }

    //Time
    fTime[ipmt-1] = (TH1D*) fTimeVSAmplitude[ipmt-1]->ProjectionY(Form("fTime%d",ipmt), 1, nbinsX); 
    meanTime[ipmt-1] = -9999; //dummy init 
    if(fTime[ipmt-1]->GetEntries()>0){
      if(fTime[ipmt-1]->GetEntries()>20){
        meanTime[ipmt-1] = GetParameterGaus((TH1F*) fTime[ipmt-1], 1); // Mean Time
      }else if(fTime[ipmt-1]->GetEntries()>0){
        meanTime[ipmt-1] = fTime[ipmt-1]->GetMean();
      } 
    }
  }



  if(fResolution->GetEntries()>20){
    resolutionSigma = GetParameterGaus(fResolution, 2); //gaussian sigma 
  }else if(fResolution->GetEntries()>0){
    resolutionSigma = fResolution->GetRMS(); //gaussian sigma 
  }

  if(fTzeroORAplusORC->GetEntries()>20){
    tzeroOrAPlusOrC = GetParameterGaus(fTzeroORAplusORC, 1); //gaussian mean 
  }else if(fTzeroORAplusORC->GetEntries()>0){
    tzeroOrAPlusOrC = fTzeroORAplusORC->GetMean();
  }

  if(fTzeroORA->GetEntries()>20){ 
    tzeroOrA = GetParameterGaus(fTzeroORA, 1); //gaussian mean
  }else if(fTzeroORA->GetEntries()>0){
    tzeroOrA = fTzeroORA->GetMean();
  }

  if(fTzeroORC->GetEntries()>20){
    tzeroOrC = GetParameterGaus(fTzeroORC, 1); //gaussian mean 
  }else if(fTzeroORC->GetEntries()>0){
    tzeroOrC = fTzeroORC->GetMean(); //gaussian mean 
  }

  //-----> analyze the new histogram here and set mean/sigma


  f->Close();

  //-------------------- READ OCDB TIME DELAYS ---------------------------
  // Arguments:
  AliCDBManager* man = AliCDBManager::Instance();
  man->SetDefaultStorage(ocdbStorage);
  man->SetRun(run);
  AliCDBEntry *entry = AliCDBManager::Instance()->Get("T0/Calib/TimeDelay");
  AliT0CalibTimeEq *clb = (AliT0CalibTimeEq*)entry->GetObject(); 
  for (Int_t i=0; i<NPMTs; i++){
    timeDelayOCDB[i] = 0;
    if(clb)
      timeDelayOCDB[i] = clb->GetCFDvalue(i,0);
  }


 
  //--------------- write walues to the output ------------ 
  TTreeSRedirector* pcstream = NULL;
  pcstream = new TTreeSRedirector(outfile);
  if (!pcstream) return;


  TFile *x =  pcstream->GetFile();
  x->cd();

  TObjString runType;
  Int_t startTimeGRP=0;
  Int_t stopTimeGRP=0;
  Int_t time=0;
  Int_t duration=0;

  time     = (startTimeGRP+stopTimeGRP)/2;
  duration = (stopTimeGRP-startTimeGRP);

  (*pcstream)<<"t0QA"<<
                  "run="<<run;//<<
                 //"time="<<time<<
            // "startTimeGRP="<<startTimeGRP<<
            //  "stopTimeGRP="<<stopTimeGRP<<
              ///    "duration="<<duration<<
               //   "runType.="<<&runType;
               

 (*pcstream)<<"t0QA"<<
             "resolution="<< resolutionSigma<<
             "tzeroOrAPlusOrC="<< tzeroOrAPlusOrC<<
             "tzeroOrA="<< tzeroOrA<<
             "tzeroOrC="<< tzeroOrC<<
             "amplPMT1="<<meanAmplitude[0]<<
             "amplPMT2="<<meanAmplitude[1]<<
             "amplPMT3="<<meanAmplitude[2]<<
             "amplPMT4="<<meanAmplitude[3]<<
             "amplPMT5="<<meanAmplitude[4]<<
             "amplPMT6="<<meanAmplitude[5]<<
             "amplPMT7="<<meanAmplitude[6]<<
             "amplPMT8="<<meanAmplitude[7]<<
             "amplPMT9="<<meanAmplitude[8]<<
             "amplPMT10="<<meanAmplitude[9]<<
             "amplPMT11="<<meanAmplitude[10]<<
             "amplPMT12="<<meanAmplitude[11]<<
             "amplPMT13="<<meanAmplitude[12]<<
             "amplPMT14="<<meanAmplitude[13]<<
             "amplPMT15="<<meanAmplitude[14]<<
             "amplPMT16="<<meanAmplitude[15]<<
             "amplPMT17="<<meanAmplitude[16]<<
             "amplPMT18="<<meanAmplitude[17]<<
             "amplPMT19="<<meanAmplitude[18]<<
             "amplPMT20="<<meanAmplitude[19]<<
             "amplPMT21="<<meanAmplitude[20]<<
             "amplPMT22="<<meanAmplitude[21]<<
             "amplPMT23="<<meanAmplitude[22]<<
             "amplPMT24="<<meanAmplitude[23]<<
             "timePMT1="<<meanTime[0]<<
             "timePMT2="<<meanTime[1]<<
             "timePMT3="<<meanTime[2]<<
             "timePMT4="<<meanTime[3]<<
             "timePMT5="<<meanTime[4]<<
             "timePMT6="<<meanTime[5]<<
             "timePMT7="<<meanTime[6]<<
             "timePMT8="<<meanTime[7]<<
             "timePMT9="<<meanTime[8]<<
             "timePMT10="<<meanTime[9]<<
             "timePMT11="<<meanTime[10]<<
             "timePMT12="<<meanTime[11]<<
             "timePMT13="<<meanTime[12]<<
             "timePMT14="<<meanTime[13]<<
             "timePMT15="<<meanTime[14]<<
             "timePMT16="<<meanTime[15]<<
             "timePMT17="<<meanTime[16]<<
             "timePMT18="<<meanTime[17]<<
             "timePMT19="<<meanTime[18]<<
             "timePMT20="<<meanTime[19]<<
             "timePMT21="<<meanTime[20]<<
             "timePMT22="<<meanTime[21]<<
             "timePMT23="<<meanTime[22]<<
             "timePMT24="<<meanTime[23];
(*pcstream)<<"t0QA"<<
             "timeDelayPMT1="<<timeDelayOCDB[0]<<
             "timeDelayPMT2="<<timeDelayOCDB[1]<<
             "timeDelayPMT3="<<timeDelayOCDB[2]<<
             "timeDelayPMT4="<<timeDelayOCDB[3]<<
             "timeDelayPMT5="<<timeDelayOCDB[4]<<
             "timeDelayPMT6="<<timeDelayOCDB[5]<<
             "timeDelayPMT7="<<timeDelayOCDB[6]<<
             "timeDelayPMT8="<<timeDelayOCDB[7]<<
             "timeDelayPMT9="<<timeDelayOCDB[8]<<
             "timeDelayPMT10="<<timeDelayOCDB[9]<<
             "timeDelayPMT11="<<timeDelayOCDB[10]<<
             "timeDelayPMT12="<<timeDelayOCDB[11]<<
             "timeDelayPMT13="<<timeDelayOCDB[12]<<
             "timeDelayPMT14="<<timeDelayOCDB[13]<<
             "timeDelayPMT15="<<timeDelayOCDB[14]<<
             "timeDelayPMT16="<<timeDelayOCDB[15]<<
             "timeDelayPMT17="<<timeDelayOCDB[16]<<
             "timeDelayPMT18="<<timeDelayOCDB[17]<<
             "timeDelayPMT19="<<timeDelayOCDB[18]<<
             "timeDelayPMT20="<<timeDelayOCDB[19]<<
             "timeDelayPMT21="<<timeDelayOCDB[20]<<
             "timeDelayPMT22="<<timeDelayOCDB[21]<<
             "timeDelayPMT23="<<timeDelayOCDB[22]<<
             "timeDelayPMT24="<<timeDelayOCDB[23];

            //-----> add the mean/sigma of the new histogram here      
 
 (*pcstream)<<"t0QA"<<"\n";
  
  pcstream->Close(); 
 
  delete pcstream; 

  return;

}

//_____________________________________________________________________________
double GetParameterGaus(TH1F *histo, int whichParameter){

   int    maxBin   =  histo->GetMaximumBin(); 
   double max      =  (histo->GetBinContent(maxBin-1) + histo->GetBinContent(maxBin) + histo->GetBinContent(maxBin+1))/3;
   double mean     =  histo->GetBinCenter(maxBin); //mean
   double lowfwhm  =  histo->GetBinCenter(histo->FindFirstBinAbove(max/2));
   double highfwhm =  histo->GetBinCenter(histo->FindLastBinAbove(max/2));
   double sigma    = (highfwhm - lowfwhm)/2.35482; //estimate fwhm  FWHM = 2.35482*sigma

   TF1 *gaussfit   = new TF1("gaussfit","gaus", mean - 4*sigma, mean + 4*sigma); // fit in +- 4 sigma window
   gaussfit->SetParameters(max, mean, sigma); 

   if(whichParameter==2)
     histo->Fit(gaussfit,"RQNI");
   else
     histo->Fit(gaussfit,"RQN");

   double parValue = gaussfit->GetParameter(whichParameter); 

   delete gaussfit; 
 
   return parValue;
}


 MakeTrendT0.C:1
 MakeTrendT0.C:2
 MakeTrendT0.C:3
 MakeTrendT0.C:4
 MakeTrendT0.C:5
 MakeTrendT0.C:6
 MakeTrendT0.C:7
 MakeTrendT0.C:8
 MakeTrendT0.C:9
 MakeTrendT0.C:10
 MakeTrendT0.C:11
 MakeTrendT0.C:12
 MakeTrendT0.C:13
 MakeTrendT0.C:14
 MakeTrendT0.C:15
 MakeTrendT0.C:16
 MakeTrendT0.C:17
 MakeTrendT0.C:18
 MakeTrendT0.C:19
 MakeTrendT0.C:20
 MakeTrendT0.C:21
 MakeTrendT0.C:22
 MakeTrendT0.C:23
 MakeTrendT0.C:24
 MakeTrendT0.C:25
 MakeTrendT0.C:26
 MakeTrendT0.C:27
 MakeTrendT0.C:28
 MakeTrendT0.C:29
 MakeTrendT0.C:30
 MakeTrendT0.C:31
 MakeTrendT0.C:32
 MakeTrendT0.C:33
 MakeTrendT0.C:34
 MakeTrendT0.C:35
 MakeTrendT0.C:36
 MakeTrendT0.C:37
 MakeTrendT0.C:38
 MakeTrendT0.C:39
 MakeTrendT0.C:40
 MakeTrendT0.C:41
 MakeTrendT0.C:42
 MakeTrendT0.C:43
 MakeTrendT0.C:44
 MakeTrendT0.C:45
 MakeTrendT0.C:46
 MakeTrendT0.C:47
 MakeTrendT0.C:48
 MakeTrendT0.C:49
 MakeTrendT0.C:50
 MakeTrendT0.C:51
 MakeTrendT0.C:52
 MakeTrendT0.C:53
 MakeTrendT0.C:54
 MakeTrendT0.C:55
 MakeTrendT0.C:56
 MakeTrendT0.C:57
 MakeTrendT0.C:58
 MakeTrendT0.C:59
 MakeTrendT0.C:60
 MakeTrendT0.C:61
 MakeTrendT0.C:62
 MakeTrendT0.C:63
 MakeTrendT0.C:64
 MakeTrendT0.C:65
 MakeTrendT0.C:66
 MakeTrendT0.C:67
 MakeTrendT0.C:68
 MakeTrendT0.C:69
 MakeTrendT0.C:70
 MakeTrendT0.C:71
 MakeTrendT0.C:72
 MakeTrendT0.C:73
 MakeTrendT0.C:74
 MakeTrendT0.C:75
 MakeTrendT0.C:76
 MakeTrendT0.C:77
 MakeTrendT0.C:78
 MakeTrendT0.C:79
 MakeTrendT0.C:80
 MakeTrendT0.C:81
 MakeTrendT0.C:82
 MakeTrendT0.C:83
 MakeTrendT0.C:84
 MakeTrendT0.C:85
 MakeTrendT0.C:86
 MakeTrendT0.C:87
 MakeTrendT0.C:88
 MakeTrendT0.C:89
 MakeTrendT0.C:90
 MakeTrendT0.C:91
 MakeTrendT0.C:92
 MakeTrendT0.C:93
 MakeTrendT0.C:94
 MakeTrendT0.C:95
 MakeTrendT0.C:96
 MakeTrendT0.C:97
 MakeTrendT0.C:98
 MakeTrendT0.C:99
 MakeTrendT0.C:100
 MakeTrendT0.C:101
 MakeTrendT0.C:102
 MakeTrendT0.C:103
 MakeTrendT0.C:104
 MakeTrendT0.C:105
 MakeTrendT0.C:106
 MakeTrendT0.C:107
 MakeTrendT0.C:108
 MakeTrendT0.C:109
 MakeTrendT0.C:110
 MakeTrendT0.C:111
 MakeTrendT0.C:112
 MakeTrendT0.C:113
 MakeTrendT0.C:114
 MakeTrendT0.C:115
 MakeTrendT0.C:116
 MakeTrendT0.C:117
 MakeTrendT0.C:118
 MakeTrendT0.C:119
 MakeTrendT0.C:120
 MakeTrendT0.C:121
 MakeTrendT0.C:122
 MakeTrendT0.C:123
 MakeTrendT0.C:124
 MakeTrendT0.C:125
 MakeTrendT0.C:126
 MakeTrendT0.C:127
 MakeTrendT0.C:128
 MakeTrendT0.C:129
 MakeTrendT0.C:130
 MakeTrendT0.C:131
 MakeTrendT0.C:132
 MakeTrendT0.C:133
 MakeTrendT0.C:134
 MakeTrendT0.C:135
 MakeTrendT0.C:136
 MakeTrendT0.C:137
 MakeTrendT0.C:138
 MakeTrendT0.C:139
 MakeTrendT0.C:140
 MakeTrendT0.C:141
 MakeTrendT0.C:142
 MakeTrendT0.C:143
 MakeTrendT0.C:144
 MakeTrendT0.C:145
 MakeTrendT0.C:146
 MakeTrendT0.C:147
 MakeTrendT0.C:148
 MakeTrendT0.C:149
 MakeTrendT0.C:150
 MakeTrendT0.C:151
 MakeTrendT0.C:152
 MakeTrendT0.C:153
 MakeTrendT0.C:154
 MakeTrendT0.C:155
 MakeTrendT0.C:156
 MakeTrendT0.C:157
 MakeTrendT0.C:158
 MakeTrendT0.C:159
 MakeTrendT0.C:160
 MakeTrendT0.C:161
 MakeTrendT0.C:162
 MakeTrendT0.C:163
 MakeTrendT0.C:164
 MakeTrendT0.C:165
 MakeTrendT0.C:166
 MakeTrendT0.C:167
 MakeTrendT0.C:168
 MakeTrendT0.C:169
 MakeTrendT0.C:170
 MakeTrendT0.C:171
 MakeTrendT0.C:172
 MakeTrendT0.C:173
 MakeTrendT0.C:174
 MakeTrendT0.C:175
 MakeTrendT0.C:176
 MakeTrendT0.C:177
 MakeTrendT0.C:178
 MakeTrendT0.C:179
 MakeTrendT0.C:180
 MakeTrendT0.C:181
 MakeTrendT0.C:182
 MakeTrendT0.C:183
 MakeTrendT0.C:184
 MakeTrendT0.C:185
 MakeTrendT0.C:186
 MakeTrendT0.C:187
 MakeTrendT0.C:188
 MakeTrendT0.C:189
 MakeTrendT0.C:190
 MakeTrendT0.C:191
 MakeTrendT0.C:192
 MakeTrendT0.C:193
 MakeTrendT0.C:194
 MakeTrendT0.C:195
 MakeTrendT0.C:196
 MakeTrendT0.C:197
 MakeTrendT0.C:198
 MakeTrendT0.C:199
 MakeTrendT0.C:200
 MakeTrendT0.C:201
 MakeTrendT0.C:202
 MakeTrendT0.C:203
 MakeTrendT0.C:204
 MakeTrendT0.C:205
 MakeTrendT0.C:206
 MakeTrendT0.C:207
 MakeTrendT0.C:208
 MakeTrendT0.C:209
 MakeTrendT0.C:210
 MakeTrendT0.C:211
 MakeTrendT0.C:212
 MakeTrendT0.C:213
 MakeTrendT0.C:214
 MakeTrendT0.C:215
 MakeTrendT0.C:216
 MakeTrendT0.C:217
 MakeTrendT0.C:218
 MakeTrendT0.C:219
 MakeTrendT0.C:220
 MakeTrendT0.C:221
 MakeTrendT0.C:222
 MakeTrendT0.C:223
 MakeTrendT0.C:224
 MakeTrendT0.C:225
 MakeTrendT0.C:226
 MakeTrendT0.C:227
 MakeTrendT0.C:228
 MakeTrendT0.C:229
 MakeTrendT0.C:230
 MakeTrendT0.C:231
 MakeTrendT0.C:232
 MakeTrendT0.C:233
 MakeTrendT0.C:234
 MakeTrendT0.C:235
 MakeTrendT0.C:236
 MakeTrendT0.C:237
 MakeTrendT0.C:238
 MakeTrendT0.C:239
 MakeTrendT0.C:240
 MakeTrendT0.C:241
 MakeTrendT0.C:242
 MakeTrendT0.C:243
 MakeTrendT0.C:244
 MakeTrendT0.C:245
 MakeTrendT0.C:246
 MakeTrendT0.C:247
 MakeTrendT0.C:248
 MakeTrendT0.C:249
 MakeTrendT0.C:250
 MakeTrendT0.C:251
 MakeTrendT0.C:252
 MakeTrendT0.C:253
 MakeTrendT0.C:254
 MakeTrendT0.C:255
 MakeTrendT0.C:256
 MakeTrendT0.C:257
 MakeTrendT0.C:258
 MakeTrendT0.C:259
 MakeTrendT0.C:260
 MakeTrendT0.C:261