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

// $Id$

//-----------------------------------------------------------------------------
/// \class AliESDMuonCluster
///
/// Class to describe the MUON clusters in the Event Summary Data
///
/// \author Philippe Pillot, Subatech
//-----------------------------------------------------------------------------

#include "AliESDEvent.h"
#include "AliESDMuonCluster.h"
#include "AliESDMuonPad.h"

#include "AliLog.h"

#include <TClonesArray.h>
#include <Riostream.h>

using std::endl;
using std::cout;
/// \cond CLASSIMP
ClassImp(AliESDMuonCluster)
/// \endcond

//_____________________________________________________________________________
AliESDMuonCluster::AliESDMuonCluster()
: TObject(),
  fCharge(0.),
  fChi2(0.),
  fPads(0x0),
  fNPads(0),
  fPadsId(0x0),
  fLabel(-1)
{
  /// default constructor
  fXYZ[0] = fXYZ[1] = fXYZ[2] = 0.;
  fErrXY[0] = fErrXY[1] = 0.;
}

//_____________________________________________________________________________
AliESDMuonCluster::AliESDMuonCluster (const AliESDMuonCluster& cluster)
: TObject(cluster),
  fCharge(cluster.fCharge),
  fChi2(cluster.fChi2),
  fPads(0x0),
  fNPads(cluster.fNPads),
  fPadsId(0x0),
  fLabel(cluster.fLabel)
{
  /// Copy constructor
  fXYZ[0] = cluster.fXYZ[0];
  fXYZ[1] = cluster.fXYZ[1];
  fXYZ[2] = cluster.fXYZ[2];
  fErrXY[0] = cluster.fErrXY[0];
  fErrXY[1] = cluster.fErrXY[1];
  
  if (cluster.fPads) {
    fPads = new TClonesArray("AliESDMuonPad",cluster.fPads->GetEntriesFast());
    AliESDMuonPad *pad = (AliESDMuonPad*) cluster.fPads->First();
    while (pad) {
      new ((*fPads)[fPads->GetEntriesFast()]) AliESDMuonPad(*pad);
      pad = (AliESDMuonPad*) cluster.fPads->After(pad);
    }
  }
  
  if (cluster.fPadsId) fPadsId = new TArrayI(*(cluster.fPadsId));
}

//_____________________________________________________________________________
AliESDMuonCluster& AliESDMuonCluster::operator=(const AliESDMuonCluster& cluster)
{
  /// Equal operator
  if (this == &cluster) return *this;
  
  TObject::operator=(cluster); // don't forget to invoke the base class' assignment operator
  
  fXYZ[0] = cluster.fXYZ[0];
  fXYZ[1] = cluster.fXYZ[1];
  fXYZ[2] = cluster.fXYZ[2];
  fErrXY[0] = cluster.fErrXY[0];
  fErrXY[1] = cluster.fErrXY[1];
  
  fCharge = cluster.fCharge;
  fChi2 = cluster.fChi2;
  fLabel = cluster.fLabel;
  
  delete fPads;
  if (cluster.fPads) {
    fPads = new TClonesArray("AliESDMuonPad",cluster.fPads->GetEntriesFast());
    AliESDMuonPad *pad = (AliESDMuonPad*) cluster.fPads->First();
    while (pad) {
      new ((*fPads)[fPads->GetEntriesFast()]) AliESDMuonPad(*pad);
      pad = (AliESDMuonPad*) cluster.fPads->After(pad);
    }
  } else fPads = 0x0;
  
  SetPadsId(cluster.fNPads, cluster.GetPadsId());
  
  return *this;
}

//_____________________________________________________________________________
void AliESDMuonCluster::Copy(TObject &obj) const {
  
  /// This overwrites the virtual TOBject::Copy()
  /// to allow run time copying without casting
  /// in AliESDEvent

  if(this==&obj)return;
  AliESDMuonCluster *robj = dynamic_cast<AliESDMuonCluster*>(&obj);
  if(!robj)return; // not an AliESDMuonCluster
  *robj = *this;

}

//__________________________________________________________________________
AliESDMuonCluster::~AliESDMuonCluster()
{
  /// Destructor
  delete fPads;
  delete fPadsId;
}

//__________________________________________________________________________
void AliESDMuonCluster::Clear(Option_t* opt)
{
  /// Clear arrays
  if (opt && opt[0] == 'C') {
    if (fPads) fPads->Clear("C");
  } else {
    delete fPads; fPads = 0x0;
  }
  delete fPadsId; fPadsId = 0x0;
  fNPads = 0;
}

//_____________________________________________________________________________
void AliESDMuonCluster::AddPadId(UInt_t padId)
{
  /// Add the given pad Id to the list associated to the cluster
  if (!fPadsId) fPadsId = new TArrayI(10);
  if (fPadsId->GetSize() <= fNPads) fPadsId->Set(fNPads+10);
  fPadsId->AddAt(static_cast<Int_t>(padId), fNPads++);
}

//_____________________________________________________________________________
void AliESDMuonCluster::SetPadsId(Int_t nPads, const UInt_t *padsId)
{
  /// Fill the list pads'Id associated to the cluster with the given list
  
  if (nPads <= 0 || !padsId) {
    delete fPadsId;
    fPadsId = 0x0;
    fNPads = 0;
    return;
  }
  
  if (!fPadsId) fPadsId = new TArrayI(nPads, reinterpret_cast<const Int_t*>(padsId));
  else fPadsId->Set(nPads, reinterpret_cast<const Int_t*>(padsId));
  fNPads = nPads;
  
}

//_____________________________________________________________________________
void AliESDMuonCluster::MovePadsToESD(AliESDEvent &esd)
{
  /// move the pads to the new ESD structure
  if (!fPads) return;
  for (Int_t i = 0; i < fPads->GetEntriesFast(); i++) {
    AliESDMuonPad *pad = static_cast<AliESDMuonPad*>(fPads->UncheckedAt(i));
    AliESDMuonPad *newPad = esd.NewMuonPad();
    *newPad = *pad;
    AddPadId(newPad->GetUniqueID());
  }
  delete fPads;
  fPads = 0x0;
}

//_____________________________________________________________________________
void AliESDMuonCluster::Print(Option_t */*option*/) const
{
  /// print cluster content
  UInt_t cId = GetUniqueID();
  
  cout<<Form("clusterID=%u (ch=%d, det=%d, index=%d)",
	     cId,GetChamberId(),GetDetElemId(),GetClusterIndex())<<endl;
  
  cout<<Form("  position=(%5.2f, %5.2f, %5.2f), sigma=(%5.2f, %5.2f, 0.0)",
	     GetX(),GetY(),GetZ(),GetErrX(),GetErrY())<<endl;
  
  cout<<Form("  charge=%5.2f, chi2=%5.2f, MClabel=%d", GetCharge(), GetChi2(), GetLabel())<<endl;
  
  if (PadsStored()) {
    cout<<"  pad infos:"<<endl;
    for (Int_t iPad=0; iPad<GetNPads(); iPad++) cout<<"  "<<GetPadId(iPad)<<endl;
  }
}

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