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.                  *
 **************************************************************************/

////////////////////////////////////////////////////////////////////////////////
//
//  This class contains all code which is used to compute any of the values
//  which can be of interest within a resonance analysis. Besides the obvious
//  invariant mass, it allows to compute other utility values on all possible
//  targets, in order to allow a wide spectrum of binning and checks.
//  When needed, this object can also define a binning in the variable which
//  it is required to compute, which is used for initializing axes of output
//  histograms (see AliRsnFunction).
//  The value computation requires this object to be passed the object whose
//  informations will be used. This object can be of any allowed input type
//  (track, pair, event), then this class must inherit from AliRsnTarget.
//  Then, when value computation is attempted, a check on target type is done
//  and computation is successful only if expected target matches that of the
//  passed object.
//  In some cases, the value computation can require a support external object,
//  which must then be passed to this class. It can be of any type inheriting
//  from TObject.
//
//  authors: A. Pulvirenti (alberto.pulvirenti@ct.infn.it)
//           M. Vala (martin.vala@cern.ch)
//
////////////////////////////////////////////////////////////////////////////////

#include "Riostream.h"

#include "TH1.h"
#include "TH2.h"
#include "TH3.h"

#include "AliLog.h"
#include "AliPID.h"
#include "AliPIDResponse.h"

#include "AliRsnDaughter.h"
#include "AliRsnEvent.h"

#include "AliRsnMiniMonitor.h"

ClassImp(AliRsnMiniMonitor)

//__________________________________________________________________________________________________
AliRsnMiniMonitor::AliRsnMiniMonitor() :
   TNamed(),
   fType(kTypes),
   fCutID(-1),
   fCharge(0),
   fListID(-1),
   fList(0x0)
{
//
// Dummy constructor
//
}

//__________________________________________________________________________________________________
AliRsnMiniMonitor::AliRsnMiniMonitor(const char *name, EType type, Int_t cutID) :
   TNamed(name, ""),
   fType(type),
   fCutID(cutID),
   fCharge(0),
   fListID(-1),
   fList(0x0)
{
//
// Default constructor
//
}

//__________________________________________________________________________________________________
AliRsnMiniMonitor::AliRsnMiniMonitor(const AliRsnMiniMonitor &copy) :
   TNamed(copy),
   fType(copy.fType),
   fCutID(copy.fCutID),
   fCharge(copy.fCharge),
   fListID(copy.fListID),
   fList(copy.fList)
{
//
// Copy constructor
//
}

//__________________________________________________________________________________________________
AliRsnMiniMonitor &AliRsnMiniMonitor::operator=(const AliRsnMiniMonitor &copy)
{
//
// Assignment operator
//

   TNamed::operator=(copy);
   if (this == &copy)
      return *this;
   fType = copy.fType;
   fCutID = copy.fCutID;
   fCharge = copy.fCharge;
   fListID = copy.fListID;
   fList = copy.fList;

   return (*this);
}

//__________________________________________________________________________________________________
Bool_t AliRsnMiniMonitor::Init(const char *name, TList *list)
{
//
// Initialize this output histogram and put into the passed list
//

   // name
   TString sname(name);
   sname += '_';
   sname += GetName();

   // check list
   fList = list;
   if (!list) {
      AliError("No list!");
      return kFALSE;
   }

   // reset histogram
   TH1 *histogram = 0x0;

   switch (fType) {
      case kTrackPt:
         sname += "_TrackPt_cut";
         sname += fCutID;
         histogram = new TH1F(sname.Data(), "", 100, 0.0, 10.0);
         break;
      case kdEdxTPCvsP:
         sname += "_TPCsignal";
         histogram = new TH2F(sname.Data(), "", 500, 0.0, 5.0, 1000, 0.0, 1000.0);
         break;
      case ktimeTOFvsPPion:
         sname += "_TOFsignalPi";
         histogram = new TH2F(sname.Data(), "", 500, 0.0, 5.0, 1000, 0.0, 200000.0);
      case ktimeTOFvsPKaon:
         sname += "_TOFsignalK";
         histogram = new TH2F(sname.Data(), "", 500, 0.0, 5.0, 1000, 0.0, 200000.0);
         break;
      case ktimeTOFvsPProton:
         sname += "_TOFsignalP";
         histogram = new TH2F(sname.Data(), "", 500, 0.0, 5.0, 1000, 0.0, 200000.0);
         break;
      default:
         AliError("Wrong enum type");
         return kFALSE;
   }

   // add to list
   if (histogram && fList) {
      histogram->Sumw2();
      fList->Add(histogram);
      fListID = fList->IndexOf(histogram);
      AliInfo(Form("Histogram '%s' added to list in slot #%d", histogram->GetName(), fListID));
      return kTRUE;
   }

   return kFALSE;
}

//_____________________________________________________________________________
Bool_t AliRsnMiniMonitor::Fill(AliRsnDaughter *track, AliRsnEvent *event)
{
//
// Fill the histogram
//

   // retrieve object from list
   if (!fList) {
      AliError("List pointer is NULL");
      return kFALSE;
   }
   TObject *obj = fList->At(fListID);
   if (!obj) {
      AliError("List object is NULL");
      return kFALSE;
   }

   Double_t valueX, valueY;
   AliVTrack *vtrack = track->Ref2Vtrack();

   AliPIDResponse *pid = event->GetPIDResponse();

   switch (fType) {
      case kTrackPt:
         if (!vtrack) {
            AliWarning("Required vtrack for this value");
            return kFALSE;
         }
         if (fCharge == '+' && vtrack->Charge() <= 0) return kFALSE;
         if (fCharge == '-' && vtrack->Charge() >= 0) return kFALSE;
         if (fCharge == '0' && vtrack->Charge() != 0) return kFALSE;
         valueX = vtrack->Pt();
         ((TH1F *)obj)->Fill(valueX);
         return kTRUE;
      case kdEdxTPCvsP:
         if (!vtrack) {
            AliWarning("Required vtrack for this value");
            return kFALSE;
         }
         valueX = vtrack->GetTPCmomentum();
         valueY = vtrack->GetTPCsignal();
         ((TH2F *)obj)->Fill(valueX, valueY);
         return kTRUE;
      case ktimeTOFvsPPion:
         if (!vtrack) {
            AliWarning("Required vtrack for this value");
            return kFALSE;
         }
         valueX = vtrack->P();
         //valueY = vtrack->GetTOFsignal();
         valueY = 1E20;
         if (pid) valueY = pid->NumberOfSigmasTOF(vtrack, AliPID::kPion);
         ((TH2F *)obj)->Fill(valueX, valueY);
         return kTRUE;
      case ktimeTOFvsPKaon:
         if (!vtrack) {
            AliWarning("Required vtrack for this value");
            return kFALSE;
         }
         valueX = vtrack->P();
         //valueY = vtrack->GetTOFsignal();
         valueY = 1E20;
         if (pid) valueY = pid->NumberOfSigmasTOF(vtrack, AliPID::kKaon);
         ((TH2F *)obj)->Fill(valueX, valueY);
         return kTRUE;
      case ktimeTOFvsPProton:
         if (!vtrack) {
            AliWarning("Required vtrack for this value");
            return kFALSE;
         }
         valueX = vtrack->P();
         //valueY = vtrack->GetTOFsignal();
         valueY = 1E20;
         if (pid) valueY = pid->NumberOfSigmasTOF(vtrack, AliPID::kProton);
         ((TH2F *)obj)->Fill(valueX, valueY);
         return kTRUE;
      default:
         AliError("Invalid value type");
         return kFALSE;
   }
}
 AliRsnMiniMonitor.cxx:1
 AliRsnMiniMonitor.cxx:2
 AliRsnMiniMonitor.cxx:3
 AliRsnMiniMonitor.cxx:4
 AliRsnMiniMonitor.cxx:5
 AliRsnMiniMonitor.cxx:6
 AliRsnMiniMonitor.cxx:7
 AliRsnMiniMonitor.cxx:8
 AliRsnMiniMonitor.cxx:9
 AliRsnMiniMonitor.cxx:10
 AliRsnMiniMonitor.cxx:11
 AliRsnMiniMonitor.cxx:12
 AliRsnMiniMonitor.cxx:13
 AliRsnMiniMonitor.cxx:14
 AliRsnMiniMonitor.cxx:15
 AliRsnMiniMonitor.cxx:16
 AliRsnMiniMonitor.cxx:17
 AliRsnMiniMonitor.cxx:18
 AliRsnMiniMonitor.cxx:19
 AliRsnMiniMonitor.cxx:20
 AliRsnMiniMonitor.cxx:21
 AliRsnMiniMonitor.cxx:22
 AliRsnMiniMonitor.cxx:23
 AliRsnMiniMonitor.cxx:24
 AliRsnMiniMonitor.cxx:25
 AliRsnMiniMonitor.cxx:26
 AliRsnMiniMonitor.cxx:27
 AliRsnMiniMonitor.cxx:28
 AliRsnMiniMonitor.cxx:29
 AliRsnMiniMonitor.cxx:30
 AliRsnMiniMonitor.cxx:31
 AliRsnMiniMonitor.cxx:32
 AliRsnMiniMonitor.cxx:33
 AliRsnMiniMonitor.cxx:34
 AliRsnMiniMonitor.cxx:35
 AliRsnMiniMonitor.cxx:36
 AliRsnMiniMonitor.cxx:37
 AliRsnMiniMonitor.cxx:38
 AliRsnMiniMonitor.cxx:39
 AliRsnMiniMonitor.cxx:40
 AliRsnMiniMonitor.cxx:41
 AliRsnMiniMonitor.cxx:42
 AliRsnMiniMonitor.cxx:43
 AliRsnMiniMonitor.cxx:44
 AliRsnMiniMonitor.cxx:45
 AliRsnMiniMonitor.cxx:46
 AliRsnMiniMonitor.cxx:47
 AliRsnMiniMonitor.cxx:48
 AliRsnMiniMonitor.cxx:49
 AliRsnMiniMonitor.cxx:50
 AliRsnMiniMonitor.cxx:51
 AliRsnMiniMonitor.cxx:52
 AliRsnMiniMonitor.cxx:53
 AliRsnMiniMonitor.cxx:54
 AliRsnMiniMonitor.cxx:55
 AliRsnMiniMonitor.cxx:56
 AliRsnMiniMonitor.cxx:57
 AliRsnMiniMonitor.cxx:58
 AliRsnMiniMonitor.cxx:59
 AliRsnMiniMonitor.cxx:60
 AliRsnMiniMonitor.cxx:61
 AliRsnMiniMonitor.cxx:62
 AliRsnMiniMonitor.cxx:63
 AliRsnMiniMonitor.cxx:64
 AliRsnMiniMonitor.cxx:65
 AliRsnMiniMonitor.cxx:66
 AliRsnMiniMonitor.cxx:67
 AliRsnMiniMonitor.cxx:68
 AliRsnMiniMonitor.cxx:69
 AliRsnMiniMonitor.cxx:70
 AliRsnMiniMonitor.cxx:71
 AliRsnMiniMonitor.cxx:72
 AliRsnMiniMonitor.cxx:73
 AliRsnMiniMonitor.cxx:74
 AliRsnMiniMonitor.cxx:75
 AliRsnMiniMonitor.cxx:76
 AliRsnMiniMonitor.cxx:77
 AliRsnMiniMonitor.cxx:78
 AliRsnMiniMonitor.cxx:79
 AliRsnMiniMonitor.cxx:80
 AliRsnMiniMonitor.cxx:81
 AliRsnMiniMonitor.cxx:82
 AliRsnMiniMonitor.cxx:83
 AliRsnMiniMonitor.cxx:84
 AliRsnMiniMonitor.cxx:85
 AliRsnMiniMonitor.cxx:86
 AliRsnMiniMonitor.cxx:87
 AliRsnMiniMonitor.cxx:88
 AliRsnMiniMonitor.cxx:89
 AliRsnMiniMonitor.cxx:90
 AliRsnMiniMonitor.cxx:91
 AliRsnMiniMonitor.cxx:92
 AliRsnMiniMonitor.cxx:93
 AliRsnMiniMonitor.cxx:94
 AliRsnMiniMonitor.cxx:95
 AliRsnMiniMonitor.cxx:96
 AliRsnMiniMonitor.cxx:97
 AliRsnMiniMonitor.cxx:98
 AliRsnMiniMonitor.cxx:99
 AliRsnMiniMonitor.cxx:100
 AliRsnMiniMonitor.cxx:101
 AliRsnMiniMonitor.cxx:102
 AliRsnMiniMonitor.cxx:103
 AliRsnMiniMonitor.cxx:104
 AliRsnMiniMonitor.cxx:105
 AliRsnMiniMonitor.cxx:106
 AliRsnMiniMonitor.cxx:107
 AliRsnMiniMonitor.cxx:108
 AliRsnMiniMonitor.cxx:109
 AliRsnMiniMonitor.cxx:110
 AliRsnMiniMonitor.cxx:111
 AliRsnMiniMonitor.cxx:112
 AliRsnMiniMonitor.cxx:113
 AliRsnMiniMonitor.cxx:114
 AliRsnMiniMonitor.cxx:115
 AliRsnMiniMonitor.cxx:116
 AliRsnMiniMonitor.cxx:117
 AliRsnMiniMonitor.cxx:118
 AliRsnMiniMonitor.cxx:119
 AliRsnMiniMonitor.cxx:120
 AliRsnMiniMonitor.cxx:121
 AliRsnMiniMonitor.cxx:122
 AliRsnMiniMonitor.cxx:123
 AliRsnMiniMonitor.cxx:124
 AliRsnMiniMonitor.cxx:125
 AliRsnMiniMonitor.cxx:126
 AliRsnMiniMonitor.cxx:127
 AliRsnMiniMonitor.cxx:128
 AliRsnMiniMonitor.cxx:129
 AliRsnMiniMonitor.cxx:130
 AliRsnMiniMonitor.cxx:131
 AliRsnMiniMonitor.cxx:132
 AliRsnMiniMonitor.cxx:133
 AliRsnMiniMonitor.cxx:134
 AliRsnMiniMonitor.cxx:135
 AliRsnMiniMonitor.cxx:136
 AliRsnMiniMonitor.cxx:137
 AliRsnMiniMonitor.cxx:138
 AliRsnMiniMonitor.cxx:139
 AliRsnMiniMonitor.cxx:140
 AliRsnMiniMonitor.cxx:141
 AliRsnMiniMonitor.cxx:142
 AliRsnMiniMonitor.cxx:143
 AliRsnMiniMonitor.cxx:144
 AliRsnMiniMonitor.cxx:145
 AliRsnMiniMonitor.cxx:146
 AliRsnMiniMonitor.cxx:147
 AliRsnMiniMonitor.cxx:148
 AliRsnMiniMonitor.cxx:149
 AliRsnMiniMonitor.cxx:150
 AliRsnMiniMonitor.cxx:151
 AliRsnMiniMonitor.cxx:152
 AliRsnMiniMonitor.cxx:153
 AliRsnMiniMonitor.cxx:154
 AliRsnMiniMonitor.cxx:155
 AliRsnMiniMonitor.cxx:156
 AliRsnMiniMonitor.cxx:157
 AliRsnMiniMonitor.cxx:158
 AliRsnMiniMonitor.cxx:159
 AliRsnMiniMonitor.cxx:160
 AliRsnMiniMonitor.cxx:161
 AliRsnMiniMonitor.cxx:162
 AliRsnMiniMonitor.cxx:163
 AliRsnMiniMonitor.cxx:164
 AliRsnMiniMonitor.cxx:165
 AliRsnMiniMonitor.cxx:166
 AliRsnMiniMonitor.cxx:167
 AliRsnMiniMonitor.cxx:168
 AliRsnMiniMonitor.cxx:169
 AliRsnMiniMonitor.cxx:170
 AliRsnMiniMonitor.cxx:171
 AliRsnMiniMonitor.cxx:172
 AliRsnMiniMonitor.cxx:173
 AliRsnMiniMonitor.cxx:174
 AliRsnMiniMonitor.cxx:175
 AliRsnMiniMonitor.cxx:176
 AliRsnMiniMonitor.cxx:177
 AliRsnMiniMonitor.cxx:178
 AliRsnMiniMonitor.cxx:179
 AliRsnMiniMonitor.cxx:180
 AliRsnMiniMonitor.cxx:181
 AliRsnMiniMonitor.cxx:182
 AliRsnMiniMonitor.cxx:183
 AliRsnMiniMonitor.cxx:184
 AliRsnMiniMonitor.cxx:185
 AliRsnMiniMonitor.cxx:186
 AliRsnMiniMonitor.cxx:187
 AliRsnMiniMonitor.cxx:188
 AliRsnMiniMonitor.cxx:189
 AliRsnMiniMonitor.cxx:190
 AliRsnMiniMonitor.cxx:191
 AliRsnMiniMonitor.cxx:192
 AliRsnMiniMonitor.cxx:193
 AliRsnMiniMonitor.cxx:194
 AliRsnMiniMonitor.cxx:195
 AliRsnMiniMonitor.cxx:196
 AliRsnMiniMonitor.cxx:197
 AliRsnMiniMonitor.cxx:198
 AliRsnMiniMonitor.cxx:199
 AliRsnMiniMonitor.cxx:200
 AliRsnMiniMonitor.cxx:201
 AliRsnMiniMonitor.cxx:202
 AliRsnMiniMonitor.cxx:203
 AliRsnMiniMonitor.cxx:204
 AliRsnMiniMonitor.cxx:205
 AliRsnMiniMonitor.cxx:206
 AliRsnMiniMonitor.cxx:207
 AliRsnMiniMonitor.cxx:208
 AliRsnMiniMonitor.cxx:209
 AliRsnMiniMonitor.cxx:210
 AliRsnMiniMonitor.cxx:211
 AliRsnMiniMonitor.cxx:212
 AliRsnMiniMonitor.cxx:213
 AliRsnMiniMonitor.cxx:214
 AliRsnMiniMonitor.cxx:215
 AliRsnMiniMonitor.cxx:216
 AliRsnMiniMonitor.cxx:217
 AliRsnMiniMonitor.cxx:218
 AliRsnMiniMonitor.cxx:219
 AliRsnMiniMonitor.cxx:220
 AliRsnMiniMonitor.cxx:221
 AliRsnMiniMonitor.cxx:222
 AliRsnMiniMonitor.cxx:223
 AliRsnMiniMonitor.cxx:224
 AliRsnMiniMonitor.cxx:225
 AliRsnMiniMonitor.cxx:226
 AliRsnMiniMonitor.cxx:227
 AliRsnMiniMonitor.cxx:228
 AliRsnMiniMonitor.cxx:229
 AliRsnMiniMonitor.cxx:230
 AliRsnMiniMonitor.cxx:231
 AliRsnMiniMonitor.cxx:232
 AliRsnMiniMonitor.cxx:233
 AliRsnMiniMonitor.cxx:234
 AliRsnMiniMonitor.cxx:235
 AliRsnMiniMonitor.cxx:236
 AliRsnMiniMonitor.cxx:237
 AliRsnMiniMonitor.cxx:238
 AliRsnMiniMonitor.cxx:239
 AliRsnMiniMonitor.cxx:240
 AliRsnMiniMonitor.cxx:241
 AliRsnMiniMonitor.cxx:242
 AliRsnMiniMonitor.cxx:243
 AliRsnMiniMonitor.cxx:244
 AliRsnMiniMonitor.cxx:245
 AliRsnMiniMonitor.cxx:246
 AliRsnMiniMonitor.cxx:247
 AliRsnMiniMonitor.cxx:248
 AliRsnMiniMonitor.cxx:249
 AliRsnMiniMonitor.cxx:250
 AliRsnMiniMonitor.cxx:251
 AliRsnMiniMonitor.cxx:252
 AliRsnMiniMonitor.cxx:253
 AliRsnMiniMonitor.cxx:254
 AliRsnMiniMonitor.cxx:255
 AliRsnMiniMonitor.cxx:256
 AliRsnMiniMonitor.cxx:257
 AliRsnMiniMonitor.cxx:258
 AliRsnMiniMonitor.cxx:259