ROOT logo
/**************************************************************************
 * Copyright(c) 2004-2006, 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.                  *
 **************************************************************************/

#include <AliITSdigitSDD.h>
#include <AliITSCalibrationSDD.h>
#include <TArrayI.h>
#include <TArrayF.h>

///////////////////////////////////////////////////////////////////
//                                                               //
// Class defining the digit object
// for SDD
// Inherits from AliITSdigit
//                                                               //
///////////////////////////////////////////////////////////////////

ClassImp(AliITSdigitSDD)


//______________________________________________________________________
AliITSdigitSDD::AliITSdigitSDD():AliITSdigit(),
fPhysics(0),
fSignalExpanded(0){
    // default constructor, zero coordinates and set array
    // elements to clearly unphysical values. A value of 0 may
    // be a valide track of hit number.
    Int_t i;

    for(i=0;i<fgkSize;i++) fTracks[i] = -3;
    for(i=0;i<fgkSize;i++) fHits[i]   = -1;
    for(i=0;i<fgkSize;i++) fTcharges[i] = 0;
    SetSignalExpanded(-1000);
}
//________________________________________________________________________
AliITSdigitSDD::AliITSdigitSDD(Float_t phys,const Int_t *digits): AliITSdigit(digits),
fPhysics(phys),
fSignalExpanded(0){
 
   // Creates a simulated SDD digit object to be updated
  for(Int_t i=0;i<fgkSize;i++) fTracks[i] = -3;
  for(Int_t i=0;i<fgkSize;i++) fHits[i]   = -1;
  for(Int_t i=0;i<fgkSize;i++) fTcharges[i] = 0;
  
  SetSignalExpanded(-1000);
}

//________________________________________________________________________
void AliITSdigitSDD::InitObject(Float_t phys,const Int_t *tracks,
			   const Int_t *hits,const Float_t *charges){

  // Protected function used by standard constructors
  fPhysics = phys;
  for(Int_t i=0; i<fgkSize; i++) {
    fTcharges[i] = charges[i];
    fTracks[i]   = tracks[i];
    fHits[i]     = hits[i];
  }
}
 
//_____________________________________________________________________________
AliITSdigitSDD::AliITSdigitSDD(Float_t phys,const Int_t *digits,
			       const Int_t *tracks,const Int_t *hits,
			       const Float_t *charges):AliITSdigit(digits),
fPhysics(0),
fSignalExpanded(0){

// standard constructor
  InitObject(phys,tracks,hits,charges);
  SetSignalExpanded(-1000);
}
//_____________________________________________________________________________
AliITSdigitSDD::AliITSdigitSDD( Float_t phys,const Int_t *digits,
    const Int_t *tracks,const Int_t *hits,const Float_t *charges, Int_t sige): AliITSdigit(digits),
fPhysics(0),
fSignalExpanded(0){

  //constructor setting also fSignalExpanded
  InitObject(phys,tracks,hits,charges);
  SetSignalExpanded(sige);
}

//_____________________________________________________________________________
Int_t AliITSdigitSDD::GetListOfTracks(TArrayI &t,TArrayF &c){

    // Fills the TArrayI t with the tracks found in fTracks removing
    // duplicated tracks, summing up their charge, and ordering the tracks
    // by the charge contributed to this digit. It will return
    // the number of tracks and fill the remaining elements to the array
    // t with -1.
    // Inputs:
    //   TArrayI  &t Reference to a TArrayI to contain the list of
    //               nonduplicated track numbers.
    //   TArrayF  &c Reference to a TArrayF to contain the summed charge
    //               contributed by each track.
    // Output:
    //   TArrayI  &t The input array filled with the nonduplicated track
    //               numbers.
    //   TArrayF  &c The input array filled with the summed charge 
    //               contributed by the corresponding track in the array t.
    // Return:
    //   Int_t The number of none -1 entries in the TArrayI t.
    Int_t nt = t.GetSize();
    nt = TMath::Min(nt,c.GetSize());
    Int_t nth = this->GetNTracks();
    Int_t n = 0,i,j;
    Bool_t inlist = kFALSE;

    t.Reset(-1); // -1 array.
    c.Reset(0.0); // zero array.
    for(i=0;i<nth;i++) {
	if(this->GetTrack(i) == -1) continue;
	inlist = kFALSE;
	for(j=0;j<n;j++)if(this->GetTrack(i) == t.At(j)){
	    inlist = kTRUE;
	    c.AddAt(this->GetCharge(i)+c.At(j),j);
	} // end for j/end if
	if(!inlist){ // add to end of list
	    t.AddAt(this->GetTrack(i),n);
	    c.AddAt(this->GetCharge(i),n);
	    if(n<nt) n++;
	} // end if
    } // end for i

    // Now lets sort the TArrays according to the charge. This algorithm
    // is based on the method from Chapter 8 section 1 Straight Insertion
    // sort. Wiliam H. Press, Saul A. Teukolsky, William T. Vetterling
    // and Brian P. Flannery, "Numerical Recipeis in C, The Art of Scientific
    // Computing", second Edition page 330 (1997).
    Int_t   tr;
    Float_t ch;
    for(i=0;i<n;i++){
	tr = t.At(i);
	ch = c.At(i);
	j = i-1;
	while(j>-1 && c.At(j)>ch){
	    t.AddAt(t.At(j+1),j);
	    c.AddAt(c.At(j+1),j);
	    j--;
	} // end while
	t.AddAt(tr,j+1);
	c.AddAt(ch,j+1);
    } // end for i
    //
    return n;
}


//______________________________________________________________________
void AliITSdigitSDD::Print(ostream *os){


  //Standard output format for this class
    Int_t i;

    AliITSdigit::Print(os);
    *os <<","<< fPhysics;
    for(i=0; i<fgkSize; i++) *os <<","<< fTcharges[i];
    for(i=0; i<fgkSize; i++) *os <<","<< fTracks[i];
    for(i=0; i<fgkSize; i++) *os <<","<< fHits[i];
    *os <<","<< fSignalExpanded;
}
//______________________________________________________________________
void AliITSdigitSDD::Read(istream *os){

  //Standard input for this class
  Int_t i;

    AliITSdigit::Read(os);
    *os >>fPhysics;
    for(i=0; i<fgkSize; i++) *os >> fTcharges[i];
    for(i=0; i<fgkSize; i++) *os >> fTracks[i];
    for(i=0; i<fgkSize; i++) *os >> fHits[i];
    *os >>fSignalExpanded;
}
//______________________________________________________________________
ostream &operator<<(ostream &os,AliITSdigitSDD &source){

  // Standard output streaming function.

    source.Print(&os);
    return os;
}
//______________________________________________________________________
istream &operator>>(istream &os,AliITSdigitSDD &source){
  
  // Standard output streaming function.

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