+AliTRDtrackGTU::AliTRDtrackGTU(const AliTRDtrackGTU &rhs) :
+ TObject(),
+ fStack(rhs.fStack),
+ fSector(rhs.fSector),
+ fPID(rhs.fPID),
+ fTracklets(0x0),
+ fTrackletMask(rhs.fTrackletMask),
+ fNTracklets(rhs.fNTracklets),
+ fRefLayerIdx(rhs.fRefLayerIdx),
+ fZChannel(rhs.fZChannel),
+ fZSubChannel(rhs.fZSubChannel),
+ fA(rhs.fA),
+ fB(rhs.fB),
+ fC(rhs.fC),
+ fLabel(rhs.fLabel)
+{
+ fTracklets = new TClonesArray("AliTRDtrackletGTU", 6);
+ for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++)
+ new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU(*((AliTRDtrackletGTU*)(*(rhs.fTracklets))[iTracklet]));
+}
+
+AliTRDtrackGTU& AliTRDtrackGTU::operator=(const AliTRDtrackGTU &rhs)
+{
+ if (&rhs != this) {
+ TObject::operator=(rhs);
+ fStack = rhs.fStack;
+ fSector = rhs.fSector;
+ fPID = rhs.fPID;
+ fTrackletMask = rhs.fTrackletMask;
+ fNTracklets = rhs.fNTracklets;
+ fRefLayerIdx = rhs.fRefLayerIdx;
+ fZChannel = rhs.fZChannel;
+ fZSubChannel = rhs.fZSubChannel;
+ fA = rhs.fA;
+ fB = rhs.fB;
+ fC = rhs.fC;
+ fLabel = rhs.fLabel;
+ for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++)
+ new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU(*((AliTRDtrackletGTU*)(*(rhs.fTracklets))[iTracklet]));
+ }
+
+ return *this;
+}
+
+AliTRDtrackGTU& AliTRDtrackGTU::operator=(const AliESDTrdTrack &rhs)
+{
+ if ((void*) &rhs != (void*) this) {
+ TObject::operator=(rhs);
+ fStack = rhs.GetStack();
+ fSector = rhs.GetSector();
+ fPID = rhs.GetPID();
+ fTrackletMask = rhs.GetLayerMask();
+ fNTracklets = 0;
+ fRefLayerIdx = -1;
+ fZChannel = -1;
+ fZSubChannel = -1;
+ fA = rhs.GetA();
+ fB = rhs.GetB();
+ fC = rhs.GetC();
+ fLabel = rhs.GetLabel();
+ for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++) {
+ AliTRDtrackletGTU *trkl = new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU();
+ if (fTrackletMask & (1 << iTracklet)) {
+ ++fNTracklets;
+ trkl->SetIndex(rhs.GetTrackletIndex(iTracklet));
+ }
+ else
+ trkl->SetIndex(-1);
+ }
+ }
+
+ return *this;
+}
+