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

/*****************************************************************
  AliStarEvent: Event container for star data

  origin:   Mikolaj Krzewicki  (mikolaj.krzewicki@cern.ch)
*****************************************************************/

#include <string.h>
#include <TObjArray.h>
#include "AliStarTrack.h"
#include "AliStarEvent.h"

ClassImp(AliStarEvent)

//______________________________________________________________________________
AliStarEvent::AliStarEvent():
  TObject(),
  fParams(),
  fTracks(NULL)
{
  //ctor
}

//______________________________________________________________________________
AliStarEvent::AliStarEvent( Int_t n ):
  TObject(),
  fParams(),
  fTracks(new TObjArray(n) )
{
  //ctor
}

//______________________________________________________________________________
AliStarEvent::AliStarEvent( const AliStarEvent& event ):
  TObject(event),
  fParams(),
  fTracks((TObjArray*)(event.fTracks)->Clone())
{
  //copy ctor
  memcpy(fParams,event.fParams,fgkNparams*sizeof(Float_t));
}

//______________________________________________________________________________
AliStarEvent& AliStarEvent::operator=( const AliStarEvent& event )
{
  //assignment
  if (this == &event) return *this;
  TObject::operator=(event);
  memcpy(fParams,event.fParams,fgkNparams*sizeof(Float_t));
  if (fTracks) fTracks->Delete();
  delete fTracks;
  if (event.fTracks)
    fTracks = (TObjArray*)(event.fTracks)->Clone(); //deep copy
  return *this;
}

//______________________________________________________________________________
void AliStarEvent::SetParams( const Float_t* params )
{
  //set params
  memcpy(fParams,params,fgkNparams*sizeof(Float_t));
}

//______________________________________________________________________________
AliStarEvent::~AliStarEvent()
{
  //dtor
  if (fTracks) fTracks->Delete();
  delete fTracks;
}

//______________________________________________________________________________
const AliStarTrack* AliStarEvent::GetTrack( const Int_t i ) const
{
  //get track i
  if (!fTracks) return NULL;
  return static_cast<AliStarTrack*>(fTracks->At(i));
}

//______________________________________________________________________________
void AliStarEvent::AddTrack( AliStarTrack* track )
{
  //add a new track to collection
  if (!fTracks) return;
  fTracks->Add(track);
}

//______________________________________________________________________________
void AliStarEvent::Reset()
{
  //remove all tracks if any and zero the event information
  if (!fTracks) 
  {
    fTracks=new TObjArray(1024);
    return;
  }
  fTracks->Delete();
  for (Int_t i=0;i<fgkNparams; i++){fParams[i]=0;}
}

//______________________________________________________________________________
void AliStarEvent::Print( Option_t* option ) const
{
  //print info
  // TNtuple* event: names are documented in the next 2 lines
  // event  = new TNtuple("event","event",
  //   "runId:eventNumber:VtxX:VtxY:VtxZ:BField:refMult:centralityId:numberOfPrimaryTracks:numberOfParticles:h0:h1:h2:h3:h4" ) ;
  //

  Int_t   runId                  = (Int_t)   fParams[0]  ;
  Int_t   eventNumber            = (Int_t)   fParams[1]  ;     
  Float_t   primaryVertexPosition[3]={ (Float_t) fParams[2],
                                       (Float_t) fParams[3],
                                       (Float_t) fParams[4] };
  Float_t magneticField          = (Float_t) fParams[5]  ;  // kilogauss
  Int_t   refMult                = (Int_t)   fParams[6]  ;  // Raw Mult into 0.5 unit: a relative number, not total Mult.
  Int_t   centralityId           = (Int_t)   fParams[7]  ;  // STAR centrality bin # based on refMult
  Int_t   numberOfPrimaryTracks  = (Int_t)   fParams[8]  ;  // # of primaries, including FTPC tracks which are not in ntuple
  Int_t   numberOfParticles      = (Int_t)   fParams[9]  ;  // # of particles passing track cuts, thus in ntuple
  
  printf("\n  runId eventNo    VtxX    VtxY    VtxZ  MagFld  refMult  CentBin  #PrimeTrak  #Tracks \n") ;
  printf("%7d  %6d %7.4f %7.4f %7.3f  %6.3f   %6d   %6d      %6d   %6d \n\n", 
	 runId, eventNumber, primaryVertexPosition[0], primaryVertexPosition[1], primaryVertexPosition[2], 
	 magneticField, refMult, centralityId, numberOfPrimaryTracks, numberOfParticles ) ;
  
  //Int_t newCentralityID ;
  //newCentralityID = Centrality( refMult) ;              // Should be the same as "centralityID" from tape
  //cout << "Test: should be the same " << newCentralityID << " " << centralityId << endl ;  // JT test

  TString optionstr(option);
  if (!optionstr.Contains("all")) return;
  if (!fTracks) return;
  AliStarTrack* track = static_cast<AliStarTrack*>( fTracks->First() );
  if (!track) return;
  track->Print("legend");
  fTracks->Print();
}

//______________________________________________________________________________
Int_t AliStarEvent::CalculateCentrality( Int_t referenceMultiplicity ) const
{
  // Note Carefully:  Centrality is based on refMult.  This is the 'reference' multiplicity that is measured
  // independpently from the TPC.  Selecting the centrality bins according to the refMult is something that
  // is calibrated for each year and each run.  You can get the basic information off the web:
  // For Example .... http://www.star.bnl.gov/protected/common/common2004/trigger2004/200gev/200gevFaq.html
  // An index pointing to FAQs, Trigger and Centrality data, for all years, is available at:
  // http://www.star.bnl.gov/public/all
  //
  // Note: Add 0.5 to the (int) that is returned by centrality() when using it as an argument for a histogram
  // that expects (float) or (double) as input parameters.  This will place the data point in the center of
  // the bin, avoids ambiguities, and is best for plotting scatter plots and contour plots.
  // For example histogram2D[1] -> Fill ( (float)CentralityID + 0.5 , SumData )   ;
  //
  // The refMult quoted in the Centrality bins array is the lower limit on refMult


  Int_t   centralityBins  [] = { 14 , 31 , 57 , 96 , 150 , 222 , 319 , 441 , 520 , 1000 } ;  // Run4 200 GeV
  Int_t   middleBinID     [] = {  0 ,  1 ,  2 ,  3 ,   4 ,   5 ,   6 ,   7 ,   8 ,    9 } ;  // ID Number
  //Info  middleBinPercent[] = { 85., 75., 65., 55.,  45.,  35.,  25.,  15., 7.5 ,  2.5 } ;  // Percent
  Int_t   myCentrality  ;

  if      ( referenceMultiplicity < centralityBins[0] )
  {
    myCentrality = middleBinID[0] ;
  }
  else if ( referenceMultiplicity < centralityBins[1] )
  {
    myCentrality = middleBinID[1] ;
  }
  else if ( referenceMultiplicity < centralityBins[2] )
  {
    myCentrality = middleBinID[2] ;
  }
  else if ( referenceMultiplicity < centralityBins[3] )
  {
    myCentrality = middleBinID[3] ;
  }
  else if ( referenceMultiplicity < centralityBins[4] )
  {
    myCentrality = middleBinID[4] ;
  }
  else if ( referenceMultiplicity < centralityBins[5] )
  {
    myCentrality = middleBinID[5] ;
  }
  else if ( referenceMultiplicity < centralityBins[6] )
  {
    myCentrality = middleBinID[6] ;
  }
  else if ( referenceMultiplicity < centralityBins[7] )
  {
    myCentrality = middleBinID[7] ;
  }
  else if ( referenceMultiplicity < centralityBins[8] )
  {
    myCentrality = middleBinID[8] ;
  }
  else
  {
    myCentrality = middleBinID[9] ;
  }

  return myCentrality ;
}


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