2 #include "AliL3Trigger.h"
3 #include "AliL3TrackArray.h"
4 #include "AliL3Transform.h"
5 #include "AliL3Vertex.h"
7 #include "AliL3DigitData.h"
8 #include "AliL3Logging.h"
9 #include "AliL3Track.h"
10 #include "AliL3MemHandler.h"
12 ClassImp(AliL3Trigger)
14 AliL3Trigger::AliL3Trigger()
24 AliL3Trigger::~AliL3Trigger()
32 void AliL3Trigger::InitTrigger()
38 fTracks = new AliL3TrackArray();
39 fTransform = new AliL3Transform;
42 void AliL3Trigger::InitPatch(Int_t slice,Int_t patch)
49 void AliL3Trigger::FillTracks(Int_t ntracks,AliL3TrackSegmentData *tr)
51 fTracks->FillTracks(ntracks,tr);
54 void AliL3Trigger::FillData(AliL3DigitRowData *data)
59 void AliL3Trigger::SetParameters(Float_t zcut,Int_t timematch,Int_t padmatch)
66 void AliL3Trigger::SetOutputData(AliL3DigitRowData *ptr)
71 void AliL3Trigger::RemovePileupTracks()
74 for(Int_t i=0; i<fTracks->GetNTracks(); i++)
76 AliL3Track *track = fTracks->GetCheckedTrack(i);
78 track->Rotate(fSlice,kTRUE);
79 track->CalculateHelix();
80 track->GetClosestPoint(fVertex,xc,yc,zc);
90 void AliL3Trigger::RemovePileupData()
94 struct rowhit {Int_t pad; Int_t time;};
95 rowhit row_cross[(fTracks->GetNTracks())];
96 Int_t digitcount[(NumRows[fPatch])];
98 AliL3DigitRowData *rowPt = fDigitRowData;
99 for(Int_t i=NRows[fPatch][0]; i<=NRows[fPatch][1]; i++)
101 digitcount[(i-NRows[fPatch][0])]=0;
102 for(Int_t j=0; j<fTracks->GetNTracks(); j++)
104 AliL3Track *track = fTracks->GetCheckedTrack(j);
106 track->GetCrossingPoint(i,hit);
107 fTransform->Slice2Sector(fSlice,i,sector,row);
108 fTransform->Local2Raw(hit,sector,row);
109 row_cross[j].pad = (Int_t)rint(hit[1]);
110 row_cross[j].time = (Int_t)rint(hit[2]);
112 AliL3DigitData *digPt = (AliL3DigitData*)rowPt->fDigitData;
114 for(Int_t k=0; k<rowPt->fNDigit; k++)
117 for(Int_t l=0; l<fTracks->GetNTracks(); l++)
119 if(abs((Int_t)digPt[k].fPad-row_cross[l].pad) < fPadMatch &&
120 abs((Int_t)digPt[k].fTime-row_cross[l].time) < fTimeMatch)
122 digitcount[(i-NRows[fPatch][0])]++;
131 AliL3MemHandler::UpdateRowPointer(rowPt);
134 Int_t size = totalcount*sizeof(AliL3DigitData) + NumRows[fPatch]*sizeof(AliL3DigitRowData);
136 LOG(AliL3Log::kDebug,"AliL3Trigger::RemovePileupData","Memory")
137 <<"Allocating "<<size<<" bytes of data for trigger event"<<ENDLOG;
138 Byte_t *data = new Byte_t[size];
140 AliL3DigitRowData *tempPt = (AliL3DigitRowData*)data;
141 rowPt = fDigitRowData;
144 for(Int_t i=NRows[fPatch][0]; i<=NRows[fPatch][1]; i++)
147 tempPt->fNDigit = digitcount[(i-NRows[fPatch][0])];
148 AliL3DigitData *digPt = (AliL3DigitData*)rowPt->fDigitData;
150 for(Int_t j=0; j<rowPt->fNDigit; j++)
152 if(digPt[j].fCharge==0) continue;
153 if(localcount >= digitcount[(i-NRows[fPatch][0])])
155 LOG(AliL3Log::kFatal,"AliL§Trigger::RemovePileupData","Array")
156 <<"Mismatch in digitcount: "<<localcount<<" "<<digitcount[(i-NRows[fPatch][0])]<<ENDLOG;
159 tempPt->fDigitData[localcount].fCharge=digPt[j].fCharge;
160 tempPt->fDigitData[localcount].fPad=digPt[j].fPad;
161 tempPt->fDigitData[localcount].fTime=digPt[j].fTime;
164 if(digitcount[(i-NRows[fPatch][0])]!=localcount)
166 LOG(AliL3Log::kFatal,"AliL§Trigger::RemovePileupData","Array")
167 <<"Mismatch in digitcount: "<<localcount<<" "<<digitcount[(i-NRows[fPatch][0])]<<ENDLOG;
169 AliL3MemHandler::UpdateRowPointer(rowPt);
170 Byte_t *tmp = (Byte_t*)tempPt;
171 Int_t size = sizeof(AliL3DigitRowData)+digitcount[(i-NRows[fPatch][0])]*sizeof(AliL3DigitData);
173 tempPt = (AliL3DigitRowData*)tmp;
176 fOutput=(AliL3DigitRowData*)data;