/*
$Log$
+Revision 1.58 2002/05/27 14:33:14 hristov
+The new class AliTrackReference used (M.Ivanov)
+
Revision 1.57 2002/05/07 17:23:11 kowal2
Linear gain inefficiency instead of the step one at the wire edges.
Int_t nrows =fTPCParam->GetNRow(isec);
- row= new TObjArray* [nrows];
+ row= new TObjArray* [nrows+2]; // 2 extra rows for cross talk
MakeSector(isec,nrows,tH,ntracks,row);
Float_t zerosup = fTPCParam->GetZeroSup();
- Int_t nrows =fTPCParam->GetNRow(isec);
+ // Int_t nrows =fTPCParam->GetNRow(isec);
fCurrentIndex[1]= isec;
//
//calculate signal
//
- Int_t row1 = TMath::Max(irow-fTPCParam->GetNCrossRows(),0);
- Int_t row2 = TMath::Min(irow+fTPCParam->GetNCrossRows(),nrows-1);
+ //Int_t row1 = TMath::Max(irow-fTPCParam->GetNCrossRows(),0);
+ //Int_t row2 = TMath::Min(irow+fTPCParam->GetNCrossRows(),nrows-1);
+ Int_t row1=irow;
+ Int_t row2=irow+2;
for (Int_t row= row1;row<=row2;row++){
Int_t nTracks= rows[row]->GetEntries();
for (i1=0;i1<nTracks;i1++){
fCurrentIndex[2]= row;
- fCurrentIndex[3]=irow;
- if (row==irow){
+ fCurrentIndex[3]=irow+1;
+ if (row==irow+1){
m2->Zero(); // clear single track signal matrix
Float_t trackLabel = GetSignal(rows[row],i1,m2,m1,indexRange);
GetList(trackLabel,nofPads,m2,indexRange,pList);
AliTPCFastVector &v = *tv;
Float_t label = v(0);
- Int_t centralPad = (fTPCParam->GetNPads(fCurrentIndex[1],fCurrentIndex[3])-1)/2;
+ Int_t centralPad = (fTPCParam->GetNPads(fCurrentIndex[1],fCurrentIndex[3]-1)-1)/2;
Int_t nElectrons = (tv->GetNrows()-1)/4;
indexRange[0]=9999; // min pad
// of electrons, one AliTPCFastVectors per each track.
//----------------------------------------------
- Int_t *nofElectrons = new Int_t [nrows]; // electron counter for each row
- AliTPCFastVector **tracks = new AliTPCFastVector* [nrows]; //pointers to the track vectors
+ Int_t *nofElectrons = new Int_t [nrows+2]; // electron counter for each row
+ AliTPCFastVector **tracks = new AliTPCFastVector* [nrows+2]; //pointers to the track vectors
- for(i=0; i<nrows; i++){
+ for(i=0; i<nrows+2; i++){
row[i] = new TObjArray;
nofElectrons[i]=0;
tracks[i]=0;
// store already filled fTrack
- for(i=0;i<nrows;i++){
+ for(i=0;i<nrows+2;i++){
if(previousTrack != -1){
if(nofElectrons[i]>0){
AliTPCFastVector &v = *tracks[i];
xyz[3]= (Float_t) (-gasgain*TMath::Log(rn));
index[0]=1;
- TransportElectron(xyz,index); //MI change -august
+ TransportElectron(xyz,index);
Int_t rowNumber;
- fTPCParam->GetPadRow(xyz,index); //MI change august
- rowNumber = index[2];
+ fTPCParam->GetPadRow(xyz,index);
+ // row 0 - cross talk from the innermost row
+ // row fNRow+1 cross talk from the outermost row
+ rowNumber = index[2]+1;
//transform position to local digit coordinates
//relative to nearest pad row
- if ((rowNumber<0)||rowNumber>=fTPCParam->GetNRow(isec)) continue;
- Float_t x1,y1;
+ if ((rowNumber<0)||rowNumber>fTPCParam->GetNRow(isec)+1) continue;
+ Float_t x1,y1;
if (isec <fTPCParam->GetNInnerSector()) {
x1 = xyz[1]*fTPCParam->GetInnerPadPitchWidth();
y1 = fTPCParam->GetYInner(rowNumber);
x1=xyz[1]*fTPCParam->GetOuterPadPitchWidth();
y1 = fTPCParam->GetYOuter(rowNumber);
}
-
// gain inefficiency at the wires edges - linear
-
x1=TMath::Abs(x1);
y1-=1.;
if(x1>y1) xyz[3]*=TMath::Max(1.e-6,(y1-x1+1.));
// store remaining track (the last one) if not empty
//
- for(i=0;i<nrows;i++){
+ for(i=0;i<nrows+2;i++){
if(nofElectrons[i]>0){
AliTPCFastVector &v = *tracks[i];
v(0) = previousTrack;
// ExB
if (fTPCParam->GetMWPCReadout()==kTRUE){
- Float_t x1=xyz[0];
- fTPCParam->Transform2to2NearestWire(xyz,index);
- Float_t dx=xyz[0]-x1;
+ Float_t dx = fTPCParam->Transform2to2NearestWire(xyz,index);
xyz[1]+=dx*(fTPCParam->GetOmegaTau());
}
- //add nonisochronity (not implemented yet)
-
+ //add nonisochronity (not implemented yet)
}
ClassImp(AliTPCdigit)
/*
$Log$
+Revision 1.7 2002/03/18 17:59:13 kowal2
+Chnges in the pad geometry - 3 pad lengths introduced.
+
Revision 1.6 2002/02/25 11:02:56 kowal2
Changes towards speeding up the code. Thanks to Marian Ivanov.
// number of pads per row
Float_t y = (x-0.5*fInnerPadPitchLength)*tan(fInnerAngle/2.)-fInnerWireMount-
fInnerPadPitchWidth/2.;
- fYInner[i] = x*tan(fInnerAngle/2.)-fInnerWireMount;
+ // 0 and fNRowLow+1 reserved for cross talk rows
+ fYInner[i+1] = x*tan(fInnerAngle/2.)-fInnerWireMount;
fNPadsLow[i] = 1+2*(Int_t)(y/fInnerPadPitchWidth) ;
}
+ // cross talk rows
+ fYInner[0]=(fPadRowLow[0]-fInnerPadPitchLength)*tan(fInnerAngle/2.)-fInnerWireMount;
+ fYInner[fNRowLow+1]=(fPadRowLow[fNRowLow-1]+fInnerPadPitchLength)*tan(fInnerAngle/2.)-fInnerWireMount;
firstrow = fOuterRadiusLow + 1.6;
for(i=0;i<fNRowUp;i++)
{
fPadRowUp[i]=x;
Float_t y =(x-0.5*fOuter1PadPitchLength)*tan(fOuterAngle/2.)-fOuterWireMount-
fOuterPadPitchWidth/2.;
- fYOuter[i]= x*tan(fOuterAngle/2.)-fOuterWireMount;
+ fYOuter[i+1]= x*tan(fOuterAngle/2.)-fOuterWireMount;
fNPadsUp[i] = 1+2*(Int_t)(y/fOuterPadPitchWidth) ;
if(i==fNRowUp1-1) {
fLastWireUp1=fPadRowUp[i] +0.375;
fOuterPadPitchWidth/2.;
fNPadsUp[i] = 1+2*(Int_t)(y/fOuterPadPitchWidth) ;
}
- fYOuter[i] = fPadRowUp[i]*tan(fOuterAngle/2.)-fOuterWireMount;
+ fYOuter[i+1] = fPadRowUp[i]*tan(fOuterAngle/2.)-fOuterWireMount;
}
+ // cross talk rows
+ fYOuter[0]=(fPadRowUp[0]-fOuter1PadPitchLength)*tan(fOuterAngle/2.)-fOuterWireMount;
+ fYOuter[fNRowUp+1]=(fPadRowUp[fNRowUp-1]+fOuter2PadPitchLength)*tan(fOuterAngle/2.)-fOuterWireMount;
fNtRows = fNInnerSector*fNRowLow+fNOuterSector*fNRowUp;
fbStatus = kTRUE;
return kTRUE;
//
//we suppose that coordinate is expressed in float digits
// it's mean coordinate system 8
- //xyz[0] - float padrow xyz[1] is float pad (center pad is number 0) and xyz[2] is float time bin
+ //xyz[0] - electron position w.r.t. pad center, normalized to pad length,
+ //xyz[1] is float pad (center pad is number 0) and xyz[2] is float time bin
if ( (fInnerPRF==0)||(fOuter1PRF==0)||(fOuter2PRF==0) ||(fTimeRF==0) ){
Error("AliTPCParamSR", "response function was not adjusted");
return -1;
} // the above is calculated only once
// calculate central padrow, pad, time
- Int_t npads = GetNPads(index[1],index[3]);
+ Int_t npads = GetNPads(index[1],index[3]-1);
Int_t cpadrow = index[2]; // electrons are here
Int_t cpad = TMath::Nint(xyz[1]);
Int_t ctime = TMath::Nint(xyz[2]+zoffset2);
Int_t ltime = (ctime<maxt-2) ? 2: maxt-ctime-1;
// cross talk from long pad to short one
- if(row==fNRowUp1-1 && fpadrow==-1) {
+ if(row==fNRowUp1 && fpadrow==-1) {
dpadrow *= fOuter2PadPitchLength;
dpadrow += fOuterWWPitch;
dpadrow /= fOuter1PadPitchLength;
}
// cross talk from short pad to long one
- if(row==fNRowUp1 && fpadrow==1){
+ if(row==fNRowUp1+1 && fpadrow==1){
dpadrow *= fOuter1PadPitchLength;
- if(dpadrow < -0.) dpadrow = -1.; //protection against 3rd wire
+ if(dpadrow < 0.) dpadrow = -1.; //protection against 3rd wire
dpadrow += fOuterWWPitch;
dpadrow /= fOuter2PadPitchLength;