Stl3Util/gl3/gl3Event.cxx

00001 //:>------------------------------------------------------------------ 00002 //: FILE: gl3Event.cc 00003 //: HISTORY: 00004 //: 3 dec 1999 version 1.00 00005 //: 8 apr 2000 include modifications form Clemens 00006 //: 6 jul 2000 add St_l3_Coordinate_Transformer 00007 //: 12 jul 2000 merge tracks using parameters at closest 00008 //: approach (from sl3) and them extrapolate 00009 //: them to inner most hit for consumers down the line 00010 //: 13 aug 2000 replace trackMerging with maxSectorNForTrackMerging 00011 //:Jens Berger 03 jul 2001 makeVertex added: calcs vertex of the event 00012 //:<------------------------------------------------------------------ 00013 #include "Stl3Util/gl3/gl3Event.h" 00014 00015 #include "Stl3Util/base/realcc.h" 00016 #include "Stl3Util/base/FtfLog.h" 00017 00018 //#################################################################### 00019 // Constructor and Destructor 00020 //#################################################################### 00021 00022 gl3Event::gl3Event(int mxHits, int mxTracks, 00023 St_l3_Coordinate_Transformer* inTrans) 00024 { 00025 hit = NULL; 00026 track = NULL; 00027 busy = 0; 00028 00029 trackContainer = 0; 00030 trackIndex = 0; 00031 hitProcessing = 0; 00032 maxSectorNForTrackMerging = 1000000; 00033 coordinateTransformer = inTrans; 00034 setup( mxHits, mxTracks ); 00035 resetEvent(); 00036 }; 00037 00038 00039 gl3Event::~gl3Event( ) 00040 { 00041 if ( hit != 0 ) delete[] hit ; 00042 if ( track != 0 ) delete[] track; 00043 if ( trackContainer != 0 ) delete[] trackContainer; 00044 if ( trackIndex != 0 ) delete[] trackIndex ; 00045 }; 00046 00047 00048 00049 00050 //#################################################################### 00051 // Setters and getters 00052 //#################################################################### 00053 gl3Track* gl3Event::getTrack ( int n ) { 00054 if ( n < 0 || n > nTracks ) { 00055 fprintf ( stderr, " %d track index out of range \n", n ); 00056 return NULL; 00057 } 00058 return &(track[n]); 00059 } 00060 00061 00062 gl3Hit* gl3Event::getHit ( int n ) { 00063 if ( n < 0 || n > nHits ) { 00064 fprintf ( stderr, " %d hit index out of range \n", n ); 00065 return NULL; 00066 } 00067 return &(hit[n]); 00068 } 00069 00070 gl3Sector* gl3Event::getSector ( int n ) { 00071 if ( n < 0 || n > NSECTORS ) { 00072 fprintf ( stderr, " %d sector index out of range \n", n ); 00073 return NULL; 00074 } 00075 return &(sectorInfo[n]); 00076 } 00077 00078 00079 int gl3Event::getTrgCmd() 00080 { 00081 return trgData.trgCmd; 00082 }; 00083 00084 int gl3Event::getTrgWord() 00085 { 00086 return trgData.trgWord; 00087 }; 00088 00089 int gl3Event::getZDC(int n) 00090 { 00091 return trgData.ZDC[n]; 00092 }; 00093 00094 int gl3Event::getCTB(int n) 00095 { 00096 return trgData.CTB[n]; 00097 }; 00098 00099 00100 //#################################################################### 00101 // addTracks: take a pointer to the local_tracks of a sector and 00102 // (possibly) merge them with the cuurently known tracks 00103 //#################################################################### 00104 void gl3Event::addTracks ( short sector, int nTrk, local_track* localTrack ) { 00105 // 00106 gl3Track* lTrack = &(track[nTracks]) ; 00107 local_track *trk = localTrack ; 00108 int indexStore = -1 ; 00109 // 00110 int idTrack ; 00111 for ( int i = 0 ; i < nTrk ; i++ ) { 00112 lTrack->set ( sector, trk ) ; 00113 lTrack->id = sector * 1000 + abs(trk->id) ; 00114 lTrack->para = &para ; 00115 lTrack->sector = sector ; 00116 idTrack = trk->id ; 00117 // 00118 // Check where to store relation orig track<->final track 00119 // but only if requested 00120 // 00121 if ( hitProcessing ) { 00122 indexStore = -1 ; 00123 if ( abs(idTrack) < maxTracksSector ) 00124 indexStore = (sector-1)*maxTracksSector + abs(idTrack) ; 00125 else { 00126 ftfLog ( " gl3Event::addTracks: max number of tracks per Sector reached %d reached\n", 00127 idTrack ) ; 00128 } 00129 } 00130 // 00131 // if id from buffer is negative track is mergable 00132 // 00133 gl3Track* fatterTrack = 0 ; 00134 if ( maxSectorNForTrackMerging > nTrk && idTrack < 0 ) { 00135 00136 fatterTrack = lTrack->merge ( trackContainer ) ; 00137 if ( fatterTrack ) { 00138 //ftfLog ( "gl3Event: track merged !!! \n" ) ; 00139 if ( hitProcessing && indexStore > 0 ) { 00140 trackIndex[indexStore] = 00141 ((char *)fatterTrack - (char *)track )/sizeof(gl3Track)+1; 00142 } 00143 trk++ ; 00144 nMergedTracks++ ; 00145 continue ; 00146 } 00147 nMergableTracks++ ; 00148 } 00149 00150 // Store new track in trackIndex array 00151 if ( hitProcessing && indexStore > 0 ) 00152 trackIndex[indexStore] = nTracks + 1; 00153 00154 // Increment counters 00155 lTrack++ ; 00156 nTracks++ ; 00157 trk++ ; 00158 if ( nTracks+1 >= maxTracks ) { 00159 ftfLog ( " gl3Event::addTracks: max number of tracks %d reached, sector: %i nrSectorTracks: %i\n", maxTracks, sector, nTrk ) ; 00160 nTracks-- ; 00161 lTrack--; 00162 break; 00163 } 00164 } 00165 } 00166 00167 00168 00169 //#################################################################### 00170 // fillTracks: fill the gl3Tracks into the L3_GTD 00171 //#################################################################### 00172 int gl3Event::fillTracks ( int maxBytes, char* buffer, unsigned int token ){ 00173 // 00174 // Check enough space 00175 // 00176 int nBytesNeeded = sizeof(L3_GTD) + (nTracks-1) * sizeof(global_track) ; 00177 if ( nBytesNeeded > maxBytes ) { 00178 ftfLog ( " gl3Event::writeTracks: %d bytes needed less than max = %d \n", 00179 nBytesNeeded, maxBytes ) ; 00180 return 0 ; 00181 } 00182 00183 L3_GTD* head = (L3_GTD *)buffer ; 00184 00185 head->nHits = nHits ; 00186 head->xVert = 0 ; // each sector has a different vertex??? 00187 head->yVert = 0 ; 00188 head->zVert = 0 ; 00189 // bankHeader 00190 // 00191 memcpy(head->bh.bank_type,CHAR_L3_GTD,8); 00192 head->bh.bank_id = 1; 00193 head->bh.format_ver = DAQ_RAW_FORMAT_VERSION ; 00194 head->bh.byte_order = DAQ_RAW_FORMAT_ORDER ; 00195 head->bh.format_number = 0; 00196 head->bh.token = token; 00197 head->bh.w9 = DAQ_RAW_FORMAT_WORD9; 00198 head->bh.crc = 0; //don't know yet.... 00199 head->bh.length = (sizeof(struct L3_GTD) 00200 + (nTracks-1) * sizeof(struct global_track))/4 ; 00201 00202 00203 // 00204 // Loop over tracks now 00205 // 00206 global_track* oTrack = (global_track *)head->track ; 00207 int counter = 0 ; 00208 for ( int i = 0 ; i < nTracks ; i++ ) { 00209 if ( fabs(track[i].z0) > 205 ) { 00210 // ftfLog ( "gl3Event:fillTracks: problem id %d z0 %f \n", 00211 // track[i].id, track[i].z0 ) ; 00212 nBadTracks++ ; 00213 continue ; 00214 } 00215 oTrack->id = track[i].id ; 00216 oTrack->flag = track[i].flag ; 00217 oTrack->innerMostRow = track[i].innerMostRow ; 00218 oTrack->outerMostRow = track[i].outerMostRow ; 00219 oTrack->nHits = track[i].nHits ; 00220 oTrack->ndedx = track[i].nDedx ; 00221 oTrack->q = track[i].q ; 00222 oTrack->chi2[0] = track[i].chi2[0] ; 00223 oTrack->chi2[1] = track[i].chi2[1] ; 00224 oTrack->dedx = track[i].dedx ; 00225 oTrack->pt = track[i].pt ; 00226 oTrack->phi0 = track[i].phi0 ; 00227 oTrack->r0 = track[i].r0 ; 00228 oTrack->z0 = track[i].z0 ; 00229 oTrack->psi = track[i].psi ; 00230 oTrack->tanl = track[i].tanl ; 00231 oTrack->length = track[i].length ; 00232 oTrack->dpt = track[i].dpt ; 00233 oTrack->dpsi = track[i].dpsi ; 00234 oTrack->dz0 = track[i].dz0 ; 00235 oTrack->dtanl = track[i].dtanl ; 00236 oTrack++ ; 00237 counter++ ; 00238 } 00239 head->nTracks = counter ; 00240 // 00241 // return number of bytes 00242 // 00243 return ((char *)oTrack-buffer) ; 00244 } 00245 00246 00247 //#################################################################### 00248 // readEventDescriptor: get token, trigger command and trigger word 00249 // from the EventDescriptor received with the 00250 // "announce token" 00251 //#################################################################### 00252 int gl3Event::readEventDescriptor( EventDescriptor *descr ) 00253 { 00254 if (!descr) { 00255 ftfLog("gl3Event::readEventDescriptor: got NULL pointer"); 00256 return 0; 00257 } 00258 00259 trgData.trgCmd = ((descr->TRG_DAQ_cmds) & 0xf0) >> 4; 00260 trgData.trgWord = descr->TRG_word; 00261 00262 return 0; 00263 } 00264 00265 00266 00267 //#################################################################### 00268 // readL3Data: read the L3 contributions for an event. Currently 00269 // includes TPC data, but SVT and FTPC data will also 00270 // be in this data block at some time. 00271 //#################################################################### 00272 int gl3Event::readL3Data( L3_P* header ) 00273 { 00274 00275 char* buffer = (char *)header; 00276 //L3_P* header = (L3_P *)buffer ; 00277 00278 int length, offset ; 00279 char* trackPointer ; 00280 char* hitPointer ; 00281 00282 resetEvent ( ); 00283 int i ; 00284 L3_SECP* sectorP ; 00285 for ( i = 0 ; i < NSECTORS ; i++ ) { 00286 length = header->sector[i].len ; 00287 00288 if ( length==0 ) continue ; 00289 00290 offset = 4 * header->sector[i].off ; 00291 sectorP = (L3_SECP *)&(buffer[offset]); 00292 trackPointer = (char *)sectorP + sectorP->trackp.off * 4 ; 00293 int nSectorTracks = readSectorTracks ( trackPointer ) ; 00294 00295 if ( nSectorTracks < 0 ) { 00296 ftfLog("gl3Event:readEvent: error reading tracks, sector %d \n", 00297 i+1); 00298 return -1 ; 00299 } 00300 00301 if ( hitProcessing && sectorP->sl3clusterp.off ) { 00302 hitPointer = (char *)sectorP + sectorP->sl3clusterp.off * 4 ; 00303 readSectorHits ( hitPointer, nSectorTracks ) ; 00304 } 00305 00306 00307 00308 } 00309 00310 makeVertex(); 00311 00312 00313 #ifdef EVENTDISPLAY 00314 // For best merging (as least as 7/12/00) tracks 00315 // are passed from sl3 to gl3 at point of closest approach 00316 // the event viewer wants them(at least for now) at 00317 // inner most point so we extrapolate to inner most hit radius 00318 00319 double radius ; 00320 00321 for ( int i = 0 ; i < nTracks ; i++ ) { 00322 00323 radius = coordinateTransformer-> 00324 GetRadialDistanceAtRow(track[i].innerMostRow-1) ; 00325 00326 track[i].updateToRadius ( radius ) ; 00327 00328 // If track outside of TPC move radius since row 00329 // radius is equal or larger than DistanceAtRow 00330 if ( fabs(track[i].z0) > 205 ) track[i].updateToRadius ( radius+5. ) ; 00331 if ( fabs(track[i].z0) > 205 ) { 00332 ftfLog ( "gl3Event:: problem after extrapolation id %d z0 %f\n", 00333 track[i].id, track[i].z0 ) ; 00334 } 00335 } 00336 #endif 00337 // 00338 // declare event as busy 00339 // 00340 busy = 1 ; 00341 00342 return 0 ; 00343 } 00344 00345 00346 //#################################################################### 00347 // readTrgData: Read the data provided by L[0-2] trigger. Mainly 00348 // interesting for CTB and ZDC data. 00349 //#################################################################### 00350 int gl3Event::readTrgData(TrgSumData* trgSum, RawTrgDet* rawTrg) 00351 { 00352 if (trgSum != NULL) { 00353 // Get the ZDC data 00354 for (int i=0; i<16; i++) { 00355 trgData.ZDC[i] = trgSum->DSM.ZDC[i]; 00356 } 00357 } 00358 00359 if (rawTrg != NULL) { 00360 00361 // Read the CTB data 00362 // The data is delivered in 16 chunks of 16 bytes, but 00363 // the last byte of each chunk does not contain CTB 00364 // information, thus the 15*16 bytes of slat information 00365 // will be packed into an array[240]. 00366 for (int chunk=0; chunk<16; chunk++) { 00367 for (int slat=0; slat<15; slat++) { 00368 trgData.CTB[15*chunk + slat] = 00369 rawTrg->CTB[16*chunk + slat]; 00370 } 00371 } 00372 } 00373 00374 return 0; 00375 } 00376 00377 00378 //#################################################################### 00379 // readSectorHits: does what you expect 00380 //#################################################################### 00381 int gl3Event::readSectorHits ( char* buffer, int nSectorTracks ){ 00382 L3_SECCD* head = (L3_SECCD *)buffer ; 00383 // 00384 // Check coordinate transformer is there 00385 // 00386 if ( !coordinateTransformer ) { 00387 ftfLog("gl3Event::readSectorHits: there is not Coordinate Transformer \n"); 00388 return 0 ; 00389 } 00390 00391 00392 // 00393 // Check bank header type 00394 // 00395 if ( strncmp(head->bh.bank_type,CHAR_L3_SECCD,8) ) { 00396 ftfLog ( "gl3Event::readSectorHits: wrong bank type %s\n", 00397 head->bh.bank_type ) ; 00398 ftfLog ( " right bank type %s \n", CHAR_L3_SECCD ) ; 00399 return 0 ; 00400 } 00401 int sector = head->bh.bank_id; 00402 int nSectorHits = head->nrClusters_in_sector ; 00403 00404 // 00405 // Check number of hits 00406 // 00407 if ( nHits + nSectorHits > maxHits ) { 00408 ftfLog("gl3Event:readSectorHits: not enough space for hits in sector %d\n", 00409 sector ) ; 00410 ftfLog ( " maxHits %d nSectorHits %d nHits %d \n", maxHits, 00411 nSectorHits, nHits ) ; 00412 return 0 ; 00413 } 00414 00415 l3_cluster* cluster = (l3_cluster *)head->cluster ; 00416 l3_cluster* hitP ; 00417 gl3Hit* gHitP = 0 ; 00418 00419 for ( int i = 0 ; i < nSectorHits ; i++ ) { 00420 hitP = &(cluster[i]) ; 00421 // 00422 // Only if hits are going to be used for analysis unpack them 00423 // 00424 if ( hitProcessing > 1 ) { 00425 gHitP = &(hit[nHits+i]); 00426 gHitP->set (coordinateTransformer, sector, hitP); 00427 } 00428 // 00429 // Now logic to reset trackId in hits 00430 // This is to take care of track merging 00431 // 00432 int trkId = hitP->trackId ; 00433 if ( trkId < 0 || trkId > nSectorTracks ) { 00434 ftfLog ( "gl3Event:readSectorHits: %d wrong track id in hit of sector %d \n", 00435 trkId, sector ) ; 00436 continue ; 00437 } 00438 int indexStore = (sector-1)*maxTracksSector+trkId ; 00439 if ( indexStore < 0 || indexStore > NSECTORS*maxTracksSector ) { 00440 ftfLog ( "gl3Event:readSectorHits: %d wrong indexStore\n", 00441 indexStore ) ; 00442 continue ; 00443 } 00444 int index = trackIndex[indexStore] - 1 ; 00445 if ( index < 0 || index > nTracks ) continue ; 00446 // 00447 // Only if hits are gonig to be used the 00448 // linked lists are set 00449 // 00450 if ( hitProcessing > 1 ) { 00451 if ( track[index].firstHit == 0 ) 00452 track[index].firstHit = (void *)gHitP ; 00453 else 00454 ((gl3Hit *)(track[index].lastHit))->nextHit = (void *)gHitP ; 00455 track[index].lastHit = (void *)gHitP ; 00456 gHitP->trackId = track[index].id ; 00457 } 00458 // 00459 // Modify trackId of clusters got from sl3 00460 // 00461 hitP->trackId = track[index].id ; 00462 // ftfLog ( "hit trackId %d \n", track[index].id ) ; 00463 00464 } 00465 nHits += nSectorHits ; 00466 00467 return nSectorHits ; 00468 } 00469 00470 00471 //#################################################################### 00472 // readSectorTracks: guess what it dows ;) 00473 // fills some general info and calls addTracks() 00474 //#################################################################### 00475 int gl3Event::readSectorTracks ( char* buffer ){ 00476 00477 struct L3_SECTP *head = (struct L3_SECTP *)buffer ; 00478 00479 if ( strncmp(head->bh.bank_type,CHAR_L3_SECTP,8) ) { 00480 ftfLog ( "gl3Event::readSectorTracks, wrong bank type %s\n", 00481 head->bh.bank_type ) ; 00482 return -1 ; 00483 } 00484 00485 int sector = head->bh.bank_id ; 00486 if ( sector < 0 || sector > NSECTORS ) { 00487 ftfLog ( " gl3Event::readSector: %d wrong sector \n", sector ) ; 00488 return 1 ; 00489 } 00490 00491 gl3Sector* sectorP = &(sectorInfo[sector-1]) ; 00492 sectorP->filled = 1 ; 00493 sectorP->nHits = head->nHits ; 00494 sectorP->nTracks = head->nTracks ; 00495 sectorP->cpuTime = head->cpuTime ; 00496 sectorP->realTime = head->realTime ; 00497 sectorP->xVert = float(head->xVert)/1000000 ; 00498 sectorP->yVert = float(head->yVert)/1000000 ; 00499 sectorP->zVert = float(head->zVert)/1000000 ; 00500 sectorP->rVert = ::sqrt((double)( sectorP->xVert*sectorP->xVert + 00501 sectorP->yVert*sectorP->yVert)) ; 00502 sectorP->phiVert = atan2((double)sectorP->yVert,(double)sectorP->xVert) ; 00503 if ( sectorP->phiVert < 0 ) sectorP->phiVert += 2. * M_PI ; 00504 00505 //sectorP->print(); 00506 // 00507 // Set vertex parameters for track merging 00508 // 00509 para.xVertex = sectorP->xVert ; 00510 para.yVertex = sectorP->yVert ; 00511 para.zVertex = sectorP->zVert ; 00512 para.rVertex = sectorP->rVert ; 00513 para.phiVertex = sectorP->phiVert ; 00514 // 00515 char* pointer = head->banks[0].off * 4 + buffer ; 00516 int nSectorTracks ; 00517 // 00518 if ( (head->banks[0].len > 0) && (head->bh.format_number > 0) ) { 00519 // ftfLog ( "banks[0].len %d\n", head->banks[0].len ) ; 00520 nSectorTracks = (4 * head->banks[0].len - sizeof(struct bankHeader)) 00521 /sizeof(struct local_track); 00522 } 00523 else nSectorTracks = 0 ; 00524 // 00525 // Add tracks 00526 // 00527 if ( nSectorTracks > 0 ) { 00528 struct L3_LTD* headerLocal = (struct L3_LTD*)pointer ; 00529 local_track* localTrack = headerLocal->track ; 00530 addTracks ( sector, nSectorTracks, localTrack ) ; 00531 } 00532 00533 // 00534 return sectorP->nTracks ; 00535 } 00536 00537 00538 //#################################################################### 00539 // Reconstruct the vertex and store it in gl3Event::vertex 00540 //#################################################################### 00541 void gl3Event::makeVertex (){ 00542 // debug 00543 //printf ( "doing gl3Vertex process!!!\n"); 00544 00545 // init 00546 //short sector = 0 ; 00547 gl3Track* gTrack ; 00548 Ftf3DHit closestHit ; 00549 00550 hVz->Reset(); 00551 hVx->Reset(); 00552 hVy->Reset(); 00553 00554 vertex.Setxyz(0.0,0.0,0.0); 00555 00556 00557 for(int iter = 0 ; iter<1; iter++ ) { 00558 // loop over gtracks 00559 for(int trkcnt = 0 ; trkcnt<getNTracks(); trkcnt++ ) { 00560 gTrack = getTrack(trkcnt); 00561 00562 // acept only tracks with nHits more then minNoOfHitsOnTrack 00563 if ( gTrack->nHits > minNoOfHitsOnTrackUsedForVertexCalc && 00564 gTrack->pt > minMomUsedForVertexCalc) { 00565 // bad bad bad baby! Wouldn't it be nicer to use Vx and Vz! 00566 closestHit = gTrack->closestApproach(getVertex().Getx(), 00567 getVertex().Gety()); 00568 // fill histos with the coordinates of the closest point to x=y=0 00569 hVz->Fill(closestHit.z,1.0); 00570 hVx->Fill(closestHit.x,1.0); 00571 hVy->Fill(closestHit.y,1.0); 00572 } 00573 } // for(int trkcnt = 0 ; trkcnt<event->getNTracks(); trkcnt++ ) 00574 00575 // get and set the weighted mean 00576 vertex.Setxyz(hVx->getWeightedMean(6.0), 00577 hVy->getWeightedMean(6.0), 00578 hVz->getWeightedMean(4.0)); 00579 00580 } //for(int iter = 0 ; iter<2; iter++ ) 00581 00582 } 00583 00584 //#################################################################### 00585 // 00586 //#################################################################### 00587 int gl3Event::resetEvent ( ){ 00588 nHits = 0 ; 00589 nTracks = 0 ; 00590 nMergedTracks = 0 ; 00591 nMergableTracks = 0 ; 00592 nBadTracks = 0 ; 00593 busy = 0 ; 00594 00595 // Reset tracks 00596 memset(trackContainer, 0, 00597 para.nPhiTrackPlusOne*para.nEtaTrackPlusOne*sizeof(FtfContainer)); 00598 00599 // Reset hits 00600 if ( hitProcessing ) 00601 memset ( trackIndex, 0, maxTracksSector*NSECTORS*sizeof(int) ) ; 00602 00603 // Reset trigger data 00604 for (int i=0; i<16; i++) 00605 trgData.ZDC[i] = -1; 00606 00607 for (int i=0; i<240; i++) 00608 trgData.CTB[i] = -1; 00609 00610 /* 00611 for ( int i = 0 ; i < nTracks ; i++ ) { 00612 track[i].firstHit = 0 ; 00613 track[i].lastHit = 0 ; 00614 track[i].nextTrack = 0 ; 00615 } 00616 */ 00617 00618 return 0 ; 00619 } 00620 00621 //#################################################################### 00622 // 00623 //#################################################################### 00624 int gl3Event::setup ( int mxHits, int mxTracks ) 00625 { 00626 00627 if ( mxHits < 0 || mxHits > 1000000 ) { 00628 ftfLog(" gl3Event::setup: maxHits %d out of range \n", maxHits ) ; 00629 mxHits = 500000 ; 00630 } 00631 00632 if ( mxTracks < 0 || mxTracks > 1000000 ) { 00633 ftfLog(" gl3Event::setup: maxTracks %d out of range \n", maxTracks ); 00634 mxTracks = 50000 ; 00635 } 00636 00637 00638 maxHits = mxHits ; 00639 maxTracks = mxTracks ; 00640 maxTracksSector = maxTracks*2/ NSECTORS ; 00641 hit = new gl3Hit[maxHits] ; 00642 track = new gl3Track[maxTracks] ; 00643 trackIndex = new int[maxTracksSector*NSECTORS]; 00644 // 00645 // Merging variables 00646 // 00647 nMergedTracks = 0 ; 00648 00649 para.nPhiTrackPlusOne = para.nPhiTrack + 1 ; 00650 para.nEtaTrackPlusOne = para.nEtaTrack + 1 ; 00651 //----------------------------------------------------------------------- 00652 // If needed calculate track area dimensions 00653 //----------------------------------------------------------------------- 00654 para.phiSliceTrack = (para.phiMaxTrack - para.phiMinTrack)/para.nPhiTrack; 00655 para.etaSliceTrack = (para.etaMaxTrack - para.etaMinTrack)/para.nEtaTrack; 00656 00657 int nTrackVolumes = para.nPhiTrackPlusOne* para.nEtaTrackPlusOne ; 00658 trackContainer = new FtfContainer[nTrackVolumes]; 00659 if(trackContainer == NULL) { 00660 ftfLog ( "Problem with memory allocation... exiting\n") ; 00661 return 1 ; 00662 } 00663 para.primaries = 1 ; 00664 para.ptMinHelixFit = 1.e60 ; 00665 00666 nTracks = 0 ; 00667 00668 //----------------------------------------------------------------------- 00669 // for vertex calc 00670 //----------------------------------------------------------------------- 00671 minNoOfHitsOnTrackUsedForVertexCalc=14; // points 00672 minMomUsedForVertexCalc=0.25; // GeV 00673 00674 //char hid[50] ; 00675 //char title[100] ; 00676 00677 //strcpy ( hid, "Vertex_Vz" ) ; 00678 //strcpy ( title, "Vertex_Vz" ) ; 00679 hVz = new gl3Histo ( "Vertex_Vz", "Vertex_Vz", 400, -200., 200. ) ; 00680 00681 //strcpy ( hid, "Vertex_Vx" ) ; 00682 //strcpy ( title, "Vertex_Vx" ) ; 00683 hVx = new gl3Histo ( "Vertex_Vx", "Vertex_Vx", 100,-10,10); 00684 //hVx = new gl3Histo ( hid, title, 100,-10,10); 00685 00686 //strcpy ( hid, "Vertex_Vy" ) ; 00687 //strcpy ( title, "Vertex_Vy" ) ; 00688 hVy = new gl3Histo ( "Vertex_Vy", "Vertex_Vy", 100,-10,10); 00689 //hVy = new gl3Histo ( hid, title, 100,-10,10); 00690 00691 // ----------------------------------------------------------------------- 00692 00693 return 0 ; 00694 }

Generated on Sun Mar 15 04:50:50 2009 for StRoot by doxygen 1.3.7