+++ /dev/null
-#include <strings.h>
-#include "HLTMUONHitReconstructor.h"
-
-
-const int HLTMUONHitReconstructor::fgkDetectorId = 0xA00;
-const int HLTMUONHitReconstructor::fgkDDLOffSet = 12 ;
-const int HLTMUONHitReconstructor::fgkNofDDL = 8 ;
-
-const int HLTMUONHitReconstructor::fgkDDLHeaderSize = 8;
-
-const int HLTMUONHitReconstructor::fgkEvenLutSize = 3364287 + 1;
-const int HLTMUONHitReconstructor::fgkOddLutSize = 1645631 + 1;
-
-const int HLTMUONHitReconstructor::fgkLutLine[2] = {54208, 59648};
-
-const int HLTMUONHitReconstructor::fgkMinIdManuChannel[2] = {64, 917696};
-const int HLTMUONHitReconstructor::fgkMaxIdManuChannel[2] = {3364351,2563007};
-
-const float HLTMUONHitReconstructor::fgkHalfPadSize[3] = {1.25, 2.50, 5.00};
-
-const int HLTMUONHitReconstructor::GetLutLine(int iDDL){ return ( iDDL<16 ) ? fgkLutLine[0] : fgkLutLine[1] ;}
-
-HLTMUONHitReconstructor::HLTMUONHitReconstructor():
- fDCCut(0),
- fDebugLevel(0)
-{
- // ctor
-
- if(HLTMUONHitReconstructor::fgkEvenLutSize > HLTMUONHitReconstructor::fgkOddLutSize){
- fPadData = new DHLTPad[HLTMUONHitReconstructor::fgkEvenLutSize];
- }
- else{
- fPadData = new DHLTPad[HLTMUONHitReconstructor::fgkOddLutSize];
- }
-
-
- fkBlockHeaderSize = 8;
- fkDspHeaderSize = 8;
- fkBuspatchHeaderSize = 4;
-
- bzero(fGetIdTotalData,336*80*2*sizeof(int));
-}
-
-
-HLTMUONHitReconstructor::HLTMUONHitReconstructor(const HLTMUONHitReconstructor& /*rhs*/)
-{
-// Protected copy constructor
-
- printf("Not implemented.\n");
-}
-
-
-HLTMUONHitReconstructor &
-HLTMUONHitReconstructor::operator=(const HLTMUONHitReconstructor& rhs)
-{
-// Protected assignement operator
-
- if (this == &rhs) return *this;
-
- printf("Not implemented.\n");
-
- return *this;
-}
-
-HLTMUONHitReconstructor::~HLTMUONHitReconstructor()
-{
- // dtor
-
- printf("\nEnd of Run\n");
-
- if(fPadData != NULL)
- delete []fPadData;
-
- if(fLookUpTableData!=NULL)
- delete [] fLookUpTableData;
-
-
-}
-
-void HLTMUONHitReconstructor::CleanUp()
-{
-
- if(fDetManuChannelIdList != NULL)
- delete [] fDetManuChannelIdList;
-
- if(fCentralChargeB != NULL)
- delete [] fCentralChargeB;
-
- if(fCentralChargeNB != NULL)
- delete [] fCentralChargeNB;
-
- if(fRecX != NULL)
- delete [] fRecX;
-
- if(fRecY != NULL)
- delete [] fRecY;
-
- if(fAvgChargeX != NULL)
- delete [] fAvgChargeX;
-
- if(fAvgChargeY != NULL)
- delete [] fAvgChargeY;
-
-}
-
-bool HLTMUONHitReconstructor::LoadLookUpTable(DHLTLut* lookUpTableData, int lookUpTableId)
-{
-
- if(fLookUpTableData!=NULL)
- delete [] fLookUpTableData;
-
-
- // function that loads LookUpTable (= position of each pad with electronic channel associated with it)
-
- if(lookUpTableId<fgkDDLOffSet || lookUpTableId>= fgkDDLOffSet + fgkNofDDL){
- printf("DDL number is out of range (must be %d<=iDDL<%d)\n",fgkDDLOffSet,fgkDDLOffSet+fgkNofDDL);
- return false;
- }
-
- fDDLId = lookUpTableId;
-
- int lutSize = ((lookUpTableId%2)==0) ? fgkEvenLutSize : fgkOddLutSize ;
- int nofLutLine = GetLutLine(lookUpTableId);
- int idOffSet = fgkMinIdManuChannel[lookUpTableId%2];
-
- int detManuChannelId;
-
- fLookUpTableData = new DHLTLut[lutSize];
-
- fLookUpTableData[0].fIdManuChannel = 0;
- fLookUpTableData[0].fIX = 0 ;
- fLookUpTableData[0].fIY = 0 ;
- fLookUpTableData[0].fRealX = 0.0 ;
- fLookUpTableData[0].fRealY = 0.0 ;
- fLookUpTableData[0].fRealZ = 0.0 ;
- fLookUpTableData[0].fPlane = -1 ;
- fLookUpTableData[0].fPcbZone = -1 ;
-
- for(int i=0; i<nofLutLine; i++){
-
- detManuChannelId = lookUpTableData[i].fIdManuChannel - idOffSet + 1;
- fLookUpTableData[detManuChannelId].fIdManuChannel = lookUpTableData[i].fIdManuChannel - idOffSet;
- fLookUpTableData[detManuChannelId].fIX = lookUpTableData[i].fIX ;
- fLookUpTableData[detManuChannelId].fIY = lookUpTableData[i].fIY ;
- fLookUpTableData[detManuChannelId].fRealX = lookUpTableData[i].fRealX ;
- fLookUpTableData[detManuChannelId].fRealY = lookUpTableData[i].fRealY ;
- fLookUpTableData[detManuChannelId].fRealZ = lookUpTableData[i].fRealZ ;
- fLookUpTableData[detManuChannelId].fPcbZone = lookUpTableData[i].fPcbZone ;
- fLookUpTableData[detManuChannelId].fPlane = lookUpTableData[i].fPlane ;
- }
- return true;
-}
-
-bool HLTMUONHitReconstructor::SetBusToDetMap(BusToDetElem busToDetElem)
-{
-
- // function that loads BusPatch To Detection Element (SlatId) map
-
- if(busToDetElem.size()==0)
- return false;
- else
- fBusToDetElem = busToDetElem;
-
- return true;
-}
-
-
-bool HLTMUONHitReconstructor::Run(const int* rawData, int rawDataSize, DHLTRecPoint recHit[], int *nofHit)
-{
- // main function called by HLTReconstructor to perform DHLT Hitreconstruction
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::Run", "Trace")
- << "Started Run(0x" << AliHLTLog::kHex << (unsigned long)rawData
- << ", " << AliHLTLog::kDec << rawDataSize
- << ", 0x" << AliHLTLog::kHex << (unsigned long)(recHit)
- << ", " << AliHLTLog::kDec << *nofHit
- << ") ..." << ENDLOG;
-# endif
-
- fRecPoints = &recHit[0];
- fMaxRecPointsCount = *nofHit;
- fRecPointsCount = nofHit;
- *fRecPointsCount = 0;
-
- fPadData[0].fDetElemId = 0;
- fPadData[0].fBuspatchId = 0;
- fPadData[0].fIdManuChannel = 0;
- fPadData[0].fIX = 0 ;
- fPadData[0].fIY = 0 ;
- fPadData[0].fRealX = 0.0 ;
- fPadData[0].fRealY = 0.0 ;
- fPadData[0].fRealZ = 0.0 ;
- fPadData[0].fPlane = -1 ;
- fPadData[0].fPcbZone = -1 ;
- fPadData[0].fCharge = 0 ;
-
- if(!ReadDDL(rawData,rawDataSize)){
-# ifdef DEBUG
- LOG(AliHLTLog::kError, "HLTMUONHitReconstructor::Run", "Trace")
- << "Failed to read the DDL file." << ENDLOG;
- LOG(AliHLTLog::kError, "HLTMUONHitReconstructor::Run", "Trace")
- << "Please check whether end of event has been reached or probably the input rawdata path is missplled." << ENDLOG;
-# endif
- printf("Failed to read the DDL file\n");
- printf("Please check whether end of event has been reached or probably the input rawdata path is missplled\n");
- CleanUp();
- return false;
- }
-
- if(!FindRecHits()){
-# ifdef DEBUG
- LOG(AliHLTLog::kError, "HLTMUONHitReconstructor::Run", "Trace")
- << "Failed to generate RecHits." << ENDLOG;
-# endif
- printf("Failed to generate RecHits\n");
- CleanUp();
- return false;
- }
-
- return true;
-}
-
-
-
-bool HLTMUONHitReconstructor::ReadDDL(const int* rawData, int rawDataSize)
-{
- //function to read Raw Data files
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::ReadDDL", "Trace")
- << "Start of ReadDDL(0x" << AliHLTLog::kHex << (unsigned long)rawData << ", "
- << AliHLTLog::kDec << rawDataSize << ") ..." << ENDLOG;
-# endif
-
- int ddlRawDataSize;
- ddlRawDataSize = rawDataSize / 4;
-
-// int *buffer = new int[ddlRawDataSize];
- const int* buffer = rawData;
-
- fIdOffSet= fgkMinIdManuChannel[(fDDLId%2)];
- fDetManuChannelIdList = new int[ddlRawDataSize];
-
- int index = 0;
- int dataCount = 0;
- fNofFiredDetElem = 0;
- int detElemId = 0 ;
- int buspatchId = 0;
- int prevDetElemId = 0 ;
- int totalBlockSize,blockRawDataSize;
- int totalDspSize,dspRawDataSize;
- int totalBuspatchSize,buspatchRawDataSize;
- int indexDsp,indexBuspatch,indexRawData;
- unsigned int dataWord;
- int charge;
- int idManuChannel;
-
- for(int iBlock = 0; iBlock < 2 ;iBlock++){ // loop over 2 blocks
- totalBlockSize = buffer[index + 1];
- blockRawDataSize = buffer[index + 2];
- indexDsp = index + fkBlockHeaderSize;
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::ReadDDL", "Trace")
- << "Reading iBlock = " << AliHLTLog::kDec << iBlock
- << ", totalBlockSize = " << AliHLTLog::kDec << totalBlockSize
- << ", blockRawDataSize = " << AliHLTLog::kDec << blockRawDataSize
- << ", indexDsp = " << AliHLTLog::kDec << indexDsp
- << ENDLOG;
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace -"
- << "Reading iBlock = " << iBlock
- << ", totalBlockSize = " << totalBlockSize
- << ", blockRawDataSize = " << blockRawDataSize
- << ", indexDsp = " << indexDsp
- << endl;
-# endif
- while(blockRawDataSize > 0){
- totalDspSize = buffer[indexDsp + 1];
- dspRawDataSize = buffer[indexDsp + 2];
- dspRawDataSize --; // temporary solution to read buspatches
- indexBuspatch = indexDsp + fkDspHeaderSize + 2; // this extra 2 word comes from the faulty defination of Dsp header size
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::ReadDDL", "Trace")
- << "DSP block: totalDspSize = " << AliHLTLog::kDec << totalDspSize
- << ", dspRawDataSize = " << AliHLTLog::kDec << dspRawDataSize
- << ", indexBuspatch = " << AliHLTLog::kDec << indexBuspatch
- << ENDLOG;
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace - "
- << "DSP block: totalDspSize = " << totalDspSize
- << ", dspRawDataSize = " << dspRawDataSize
- << ", indexBuspatch = " << indexBuspatch
- << endl;
-# endif
- while(dspRawDataSize > 0){
- totalBuspatchSize = buffer[indexBuspatch + 1];
- buspatchRawDataSize = buffer[indexBuspatch + 2];
- buspatchId = buffer[indexBuspatch + 3];
- detElemId = fBusToDetElem[buspatchId];
- indexRawData = indexBuspatch + fkBuspatchHeaderSize;
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::ReadDDL", "Trace")
- << "Buspatch block: totalBuspatchSize = " << AliHLTLog::kDec << totalBuspatchSize
- << ", buspatchRawDataSize = " << AliHLTLog::kDec << buspatchRawDataSize
- << ", buspatchId = " << AliHLTLog::kDec << buspatchId
- << ", detElemId = " << AliHLTLog::kDec << detElemId
- << ", indexRawData = " << AliHLTLog::kDec << indexRawData
- << ENDLOG;
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace - "
- << "Buspatch block: totalBuspatchSize = " << totalBuspatchSize
- << ", buspatchRawDataSize = " << buspatchRawDataSize
- << ", buspatchId = " << buspatchId
- << ", detElemId = " << detElemId
- << ", indexRawData = " << indexRawData
- << endl;
-# endif
- while(buspatchRawDataSize > 0){
- dataWord = buffer[indexRawData];
- charge = (unsigned short)(dataWord & 0xFFF);
-
- idManuChannel = 0x0;
- idManuChannel = (idManuChannel|(detElemId%100))<<17;
- idManuChannel |= (dataWord >> 12) & 0x1FFFF;
- idManuChannel -= fIdOffSet ;
-
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::ReadDDL", "Trace")
- << "Found pad [buspatchId = " << AliHLTLog::kDec << buspatchId
- << ", detElemId = " << AliHLTLog::kDec << detElemId
- << ", idManuChannel = " << AliHLTLog::kDec << idManuChannel
- << ", charge = " << AliHLTLog::kDec << charge
- << "]" << ENDLOG;
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace - "
- << "Found pad [buspatchId = " << buspatchId
- << ", detElemId = " << detElemId
- << ", idManuChannel = " << idManuChannel
- << ", charge = " << charge
- << "]" << endl;
-# endif
-
- if(charge > fDCCut && charge > 5){ // (charge > 4) is due cut out the noise level
- fPadData[idManuChannel].fBuspatchId = buspatchId;
- fPadData[idManuChannel].fDetElemId = detElemId;
- fPadData[idManuChannel].fIdManuChannel = idManuChannel;
- fPadData[idManuChannel].fIX = fLookUpTableData[idManuChannel+1].fIX;
- fPadData[idManuChannel].fIY = fLookUpTableData[idManuChannel+1].fIY;
- fPadData[idManuChannel].fRealX = fLookUpTableData[idManuChannel+1].fRealX;
- fPadData[idManuChannel].fRealY = fLookUpTableData[idManuChannel+1].fRealY;
- fPadData[idManuChannel].fRealZ = fLookUpTableData[idManuChannel+1].fRealZ;
- fPadData[idManuChannel].fPcbZone = fLookUpTableData[idManuChannel+1].fPcbZone;
- fPadData[idManuChannel].fPlane = fLookUpTableData[idManuChannel+1].fPlane;
- fPadData[idManuChannel].fCharge = charge;
-
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::ReadDDL", "Trace")
- << "Keeping pad [fBuspatchId = " << AliHLTLog::kDec << fPadData[idManuChannel].fBuspatchId
- << ", fDetElemId = " << AliHLTLog::kDec << fPadData[idManuChannel].fDetElemId
- << ", fIdManuChannel = " << AliHLTLog::kDec << fPadData[idManuChannel].fIdManuChannel
- << ", fIX = " << AliHLTLog::kDec << fPadData[idManuChannel].fIX
- << ", fIY = " << AliHLTLog::kDec << fPadData[idManuChannel].fIY
- << ", fRealX = " << AliHLTLog::kDec << fPadData[idManuChannel].fRealX
- << ", fRealY = " << AliHLTLog::kDec << fPadData[idManuChannel].fRealY
- << ", fRealZ = " << AliHLTLog::kDec << fPadData[idManuChannel].fRealZ
- << ", fPcbZone = " << AliHLTLog::kDec << fPadData[idManuChannel].fPcbZone
- << ", fPlane = " << AliHLTLog::kDec << fPadData[idManuChannel].fPlane
- << ", fCharge = " << AliHLTLog::kDec << fPadData[idManuChannel].fCharge
- << "]" << ENDLOG;
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace - "
- << "Keeping pad [fBuspatchId = " << fPadData[idManuChannel].fBuspatchId
- << ", fDetElemId = " << fPadData[idManuChannel].fDetElemId
- << ", fIdManuChannel = " << fPadData[idManuChannel].fIdManuChannel
- << ", fIX = " << fPadData[idManuChannel].fIX
- << ", fIY = " << fPadData[idManuChannel].fIY
- << ", fRealX = " << fPadData[idManuChannel].fRealX
- << ", fRealY = " << fPadData[idManuChannel].fRealY
- << ", fRealZ = " << fPadData[idManuChannel].fRealZ
- << ", fPcbZone = " << fPadData[idManuChannel].fPcbZone
- << ", fPlane = " << fPadData[idManuChannel].fPlane
- << ", fCharge = " << fPadData[idManuChannel].fCharge
- << "]" << endl;
-# endif
-
- fDetManuChannelIdList[dataCount] = idManuChannel;
- if(detElemId != prevDetElemId){
- if(fNofFiredDetElem>0){
- fMaxFiredPerDetElem[fNofFiredDetElem-1] = dataCount;
- }
- fNofFiredDetElem++;
- prevDetElemId = detElemId ;
- }
- dataCount ++;
- }
-
-
- indexRawData++;
- buspatchRawDataSize --;
- }
- indexBuspatch += totalBuspatchSize;
- dspRawDataSize -= totalBuspatchSize;
-
-# ifdef DEBUG
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace - "
- << "End of Buspatch block: totalBuspatchSize = " << AliHLTLog::kDec << totalBuspatchSize
- << ", buspatchRawDataSize = " << AliHLTLog::kDec << buspatchRawDataSize
- << ", buspatchId = " << AliHLTLog::kDec << buspatchId
- << ", detElemId = " << AliHLTLog::kDec << detElemId
- << ", indexRawData = " << AliHLTLog::kDec << indexRawData
- << endl;
-# endif
-
- }// buspatch loop
- indexDsp += totalDspSize;
- blockRawDataSize -= totalDspSize;
-
-# ifdef DEBUG
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace - "
- << "End of DSP block: totalDspSize = " << AliHLTLog::kDec << totalDspSize
- << ", dspRawDataSize = " << AliHLTLog::kDec << dspRawDataSize
- << ", indexBuspatch = " << AliHLTLog::kDec << indexBuspatch
- << endl;
-# endif
-
- }// DSP loop
- index = totalBlockSize;
-
-# ifdef DEBUG
- cerr << "HLTMUONHitReconstructor::ReadDDL - Trace - "
- << "End of block: iBlock = " << iBlock << endl;
-# endif
-
- }// Block loop
-
-// delete[] buffer;
-
- fDigitPerDDL = dataCount;
- fMaxFiredPerDetElem[fNofFiredDetElem-1] = dataCount;
-
-
- return true;
-
-}
-
-bool HLTMUONHitReconstructor::FindRecHits()
-{
- // fuction that calls hit reconstruction detector element-wise
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::FindRecHits", "Trace")
- << "Start of FindRecHits() ..." << ENDLOG;
-# endif
-
- for(int iDet=0; iDet<fNofFiredDetElem ; iDet++){
-
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::FindRecHits", "Trace")
- << "Processing iDet = " << AliHLTLog::kDec << iDet << ENDLOG;
-# endif
-
- fCentralCountB = 0 ;
- fCentralCountNB = 0 ;
- fCentralChargeB = new int[fMaxFiredPerDetElem[iDet]];
- fCentralChargeNB = new int[fMaxFiredPerDetElem[iDet]];
-
- if(iDet>0)
- FindCentralHits(fMaxFiredPerDetElem[iDet-1],fMaxFiredPerDetElem[iDet]);
- else
- FindCentralHits(0,fMaxFiredPerDetElem[iDet]);
-
- RecXRecY();
- if(!MergeRecHits()){
- printf("Failed to merge hits\n");
- return false;
- }
-
- if(iDet==0)
- for(int i=0;i<fMaxFiredPerDetElem[iDet];i++)
- fGetIdTotalData[fPadData[fDetManuChannelIdList[i]].fIX][fPadData[fDetManuChannelIdList[i]].fIY][fPadData[fDetManuChannelIdList[i]].fPlane] = 0;
- else
- for(int i=fMaxFiredPerDetElem[iDet-1];i<fMaxFiredPerDetElem[iDet];i++)
- fGetIdTotalData[fPadData[fDetManuChannelIdList[i]].fIX][fPadData[fDetManuChannelIdList[i]].fIY][fPadData[fDetManuChannelIdList[i]].fPlane] = 0;
-
- //fDHLTTree->Fill();
-
- delete []fCentralChargeB;
- delete []fCentralChargeNB;
-
- }
-
- //for(int iPad=fDataPerDetElem[i];iPad<fDataPerDetElem[i+1];iPad++){
- for(int iPad=0;iPad<fDigitPerDDL;iPad++){
- fGetIdTotalData[fPadData[fDetManuChannelIdList[iPad]].fIX][fPadData[fDetManuChannelIdList[iPad]].fIY][fPadData[fDetManuChannelIdList[iPad]].fPlane] = 0;
- fPadData[fDetManuChannelIdList[iPad]].fDetElemId = 0;
- fPadData[fDetManuChannelIdList[iPad]].fBuspatchId = 0;
- fPadData[fDetManuChannelIdList[iPad]].fIdManuChannel = 0;
- fPadData[fDetManuChannelIdList[iPad]].fIX = 0 ;
- fPadData[fDetManuChannelIdList[iPad]].fIY = 0 ;
- fPadData[fDetManuChannelIdList[iPad]].fRealX = 0.0 ;
- fPadData[fDetManuChannelIdList[iPad]].fRealY = 0.0 ;
- fPadData[fDetManuChannelIdList[iPad]].fRealZ = 0.0 ;
- fPadData[fDetManuChannelIdList[iPad]].fPlane = -1 ;
- fPadData[fDetManuChannelIdList[iPad]].fPcbZone = -1 ;
- fPadData[fDetManuChannelIdList[iPad]].fCharge = 0 ;
- }
-
- for(int i=0;i<13;i++)
- fMaxFiredPerDetElem[i] = 0;
- delete []fDetManuChannelIdList;
-
- return true;
-}
-
-void HLTMUONHitReconstructor::FindCentralHits(int minPadId, int maxPadId)
-{
- // to find central hit associated with each cluster
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::FindCentralHits", "Trace")
- << "Start of FindCentralHits(" << AliHLTLog::kDec << minPadId << ", "
- << AliHLTLog::kDec << maxPadId << ") ..." << ENDLOG;
-# endif
-
- int b,nb;
- int idManuChannelCentral;
- bool hasFind;
- int idManuChannel;
-
- for(int iPad=minPadId;iPad<maxPadId;iPad++){
- idManuChannel = fDetManuChannelIdList[iPad];
-
-
- fGetIdTotalData[fPadData[idManuChannel].fIX]
- [fPadData[idManuChannel].fIY]
- [fPadData[idManuChannel].fPlane] = idManuChannel;
-
- if(fPadData[idManuChannel].fPlane == 0){
- //if(fPadData[idManuChannel].fIY > 0){
- if(fCentralCountB>0){
- hasFind = false;
- for(b = 0;b<fCentralCountB;b++){
- idManuChannelCentral = fCentralChargeB[b];
- if(fPadData[idManuChannel].fIX == fPadData[idManuChannelCentral].fIX
- &&
- (fPadData[idManuChannel].fIY
- == fPadData[idManuChannelCentral].fIY + 1
- ||
- fPadData[idManuChannel].fIY
- == fPadData[idManuChannelCentral].fIY + 2
- ||
- fPadData[idManuChannel].fIY
- == fPadData[idManuChannelCentral].fIY - 2
- ||
- fPadData[idManuChannel].fIY
- == fPadData[idManuChannelCentral].fIY - 1)){
-
- hasFind = true;
- if(fPadData[idManuChannel].fCharge > fPadData[idManuChannelCentral].fCharge){
- fCentralChargeB[b] = idManuChannel;
- }// if condn on pad charge
- }// if condon on pad position
- }// for loop over b
- if(!hasFind){
- fCentralChargeB[fCentralCountB] = idManuChannel;
- fCentralCountB++;
- }
- }
- else{
- fCentralChargeB[fCentralCountB] = idManuChannel;
- fCentralCountB++;
- }// check the size of centralHitB
- for(b = 0;b<fCentralCountB;b++){
- idManuChannelCentral = fCentralChargeB[b];
- }
- //}// if cond on iY > 2 (to avoid edge value pb)
- }// B/Nb checking
- else{
- if(fCentralCountNB>0){
- hasFind = false;
- for(nb = 0;nb<fCentralCountNB;nb++){
- idManuChannelCentral = fCentralChargeNB[nb];
- if(fPadData[idManuChannel].fIY == fPadData[idManuChannelCentral].fIY
- &&
- (fPadData[idManuChannel].fIX
- == fPadData[idManuChannelCentral].fIX + 1
- ||
- fPadData[idManuChannel].fIX
- == fPadData[idManuChannelCentral].fIX + 2
- ||
- fPadData[idManuChannel].fIX
- == fPadData[idManuChannelCentral].fIX - 2
- ||
- fPadData[idManuChannel].fIX
- == fPadData[idManuChannelCentral].fIX - 1)){
-
- hasFind = true;
- if(fPadData[idManuChannel].fCharge > fPadData[idManuChannelCentral].fCharge){
- fCentralChargeNB[nb] = idManuChannel;
- }// if condn over to find higher charge
- }// if condn over to find position
- }// for loop over presently all nb values
- if(!hasFind){
- fCentralChargeNB[fCentralCountNB] = idManuChannel;
- fCentralCountNB++;
- }
- }// centralHitNB size test
- else{
- fCentralChargeNB[fCentralCountNB] = idManuChannel;
- fCentralCountNB++;
- }// centralHitNB size test
-
- }// fill for bending and nonbending hit
- }// detElemId loop
-
-
-}
-
-void HLTMUONHitReconstructor::RecXRecY()
-{
- // find reconstructed X and Y for each plane separately
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::RecXRecY", "Trace")
- << "Start of RecXRecY() ..." << ENDLOG;
-# endif
-
- int b,nb;
- int idCentral;
- int idLower = 0;
- int idUpper = 0;
- int idRight = 0;
- int idLeft = 0;
- fRecY = new float[fCentralCountB];
- fRecX = new float[fCentralCountNB];
-
- fAvgChargeY = new float[fCentralCountB];
- fAvgChargeX = new float[fCentralCountNB];
-
- for(b=0;b<fCentralCountB;b++){
- idCentral = fCentralChargeB[b];
-
- if(fPadData[idCentral].fIY==0)
- idLower = 0;
- else
- idLower = fGetIdTotalData[fPadData[idCentral].fIX][fPadData[idCentral].fIY-1][0];
-
- if(fPadData[idCentral].fIY==79)
- idUpper = 0;
- else
- idUpper = fGetIdTotalData[fPadData[idCentral].fIX][fPadData[idCentral].fIY+1][0];
-
- fRecY[b] = (fPadData[idCentral].fRealY*fPadData[idCentral].fCharge
- +
- fPadData[idUpper].fRealY*fPadData[idUpper].fCharge
- +
- fPadData[idLower].fRealY*fPadData[idLower].fCharge
- )/(fPadData[idCentral].fCharge + fPadData[idUpper].fCharge + fPadData[idLower].fCharge) ;
-
- fAvgChargeY[b] = fPadData[idCentral].fCharge;
-
-
- fRecY[b] += 0.025*sin(12.56637*(0.25-(fRecY[b] - fPadData[idCentral].fRealY))) ;
- }
-
- for(nb=0;nb<fCentralCountNB;nb++){
- idCentral = fCentralChargeNB[nb];
-
- if(fPadData[idCentral].fIX==0)
- idLeft = 0;
- else
- idLeft = fGetIdTotalData[fPadData[idCentral].fIX-1][fPadData[idCentral].fIY][1];
-
- if(fPadData[idCentral].fIX==335)
- idRight = 0 ;
- else
- idRight = fGetIdTotalData[fPadData[idCentral].fIX+1][fPadData[idCentral].fIY][1];
-
- fRecX[nb] = (fPadData[idCentral].fRealX*fPadData[idCentral].fCharge
- +
- fPadData[idRight].fRealX*fPadData[idRight].fCharge
- +
- fPadData[idLeft].fRealX*fPadData[idLeft].fCharge
- )/(fPadData[idCentral].fCharge + fPadData[idRight].fCharge + fPadData[idLeft].fCharge);
-
-
- fAvgChargeX[nb] = fPadData[idCentral].fCharge;
-
- }
-
-}
-
-bool HLTMUONHitReconstructor::MergeRecHits()
-{
- // Merge reconstructed hits first over same plane then bending plane with non-bending plane
-# ifdef DEBUG
- LOG(AliHLTLog::kDebug, "HLTMUONHitReconstructor::MergeRecHits", "Trace")
- << "Start of MergeRecHits() ..." << ENDLOG;
-# endif
-
- int idCentralB,idCentralNB ;
- float padCenterXB;
- float padCenterYNB;
- float diffX,diffY;
- float halfPadLengthX,halfPadLengthY;
-
- // MERGE Bending Plane hits, which are placed side by side
- for(int i=0;i<fCentralCountB-1;i++){
- if(fRecY[i] != 0.0){
- for(int j=i+1;j<fCentralCountB;j++){
-
- if(fCentralChargeB[i]==fCentralChargeB[j]){
- fRecY[j] = 0.0;
- continue;
- }
- else if(
- (
- fPadData[fCentralChargeB[i]].fIY == fPadData[fCentralChargeB[j]].fIY
- )
- &&
- (
- fPadData[fCentralChargeB[i]].fIX == fPadData[fCentralChargeB[j]].fIX + 1
- ||
- fPadData[fCentralChargeB[i]].fIX == fPadData[fCentralChargeB[j]].fIX - 1
- )
- &&
- fRecY[j] != 0.0
- &&
- fRecY[i] != 0.0
- ){
-
- if(fAvgChargeY[i] > fAvgChargeY[j]){
- fRecY[i] = (fRecY[i]*fAvgChargeY[i] + fRecY[j]*fAvgChargeY[j]
- )/(fAvgChargeY[i] + fAvgChargeY[j]);
- fRecY[j] = 0.0;
- }
- else{
- fRecY[j] = (fRecY[i]*fAvgChargeY[i] + fRecY[j]*fAvgChargeY[j]
- )/(fAvgChargeY[i] + fAvgChargeY[j]);
- fRecY[i] = 0.0;
-
- }// search for higher charge
- }//pad position
- }//j for loop
- }//if fRecY[i] != 0.0
- }// i for loop
-
-
-
- // MERGE Non Bending Plane hits, which are place side by side
- for(int i=0;i<fCentralCountNB-1;i++){
- if(fRecX[i] != 0.0){
- for(int j=i+1;j<fCentralCountNB;j++){
-
- if(fCentralChargeNB[i]==fCentralChargeNB[j]){
- fRecX[j] = 0.0;
- continue;
- }
- else if(
- (
- fPadData[fCentralChargeNB[i]].fIX == fPadData[fCentralChargeNB[j]].fIX
- )
- &&
- (
- fPadData[fCentralChargeNB[i]].fIY == fPadData[fCentralChargeNB[j]].fIY + 1
- ||
- fPadData[fCentralChargeNB[i]].fIY == fPadData[fCentralChargeNB[j]].fIY - 1
- )
- &&
- fRecX[j] != 0.0
- &&
- fRecX[i] != 0.0
- ){
-
- if(fAvgChargeX[i] > fAvgChargeX[j]){
- fRecX[i] = (fRecX[i]*fAvgChargeX[i] + fRecX[j]*fAvgChargeX[j]
- )/(fAvgChargeX[i] + fAvgChargeX[j]);
- fRecX[j] = 0.0;
- }
- else{
- fRecX[j] = (fRecX[i]*fAvgChargeX[i] + fRecX[j]*fAvgChargeX[j]
- )/(fAvgChargeX[i] + fAvgChargeX[j]);
- fRecX[i] = 0.0;
- }// search for higher charge
- }//pad position
- }//j for loop
- }//if fRecX[i] != 0.0
- }// i for loop
-
-
-
- // Merge bending Plane hits with Non Bending
-
-
- for(int b=0;b<fCentralCountB;b++){
- if(fRecY[b]!=0.0){
- idCentralB = fCentralChargeB[b];
- padCenterXB = fPadData[idCentralB].fRealX;
-
- halfPadLengthX = fgkHalfPadSize[fPadData[idCentralB].fPcbZone] ;
-
- for(int nb=0;nb<fCentralCountNB;nb++){
- if(fRecX[nb]!=0.0){
- idCentralNB = fCentralChargeNB[nb];
-
- padCenterYNB = fPadData[idCentralNB].fRealY;
-
- halfPadLengthY = fgkHalfPadSize[fPadData[idCentralNB].fPcbZone] ;
-
- if(fabsf(fRecX[nb]) > fabsf(padCenterXB))
- diffX = fabsf(fRecX[nb]) - fabsf(padCenterXB);
- else
- diffX = fabsf(padCenterXB) - fabsf(fRecX[nb]);
-
- if(fabsf(padCenterYNB)>fabsf(fRecY[b]))
- diffY = fabsf(padCenterYNB) - fabsf(fRecY[b]);
- else
- diffY = fabsf(fRecY[b]) - fabsf(padCenterYNB);
-
- if(diffX < halfPadLengthX && diffY < halfPadLengthY ){//&& fPadData[idCentralB].fIY != 0){
-
- (fRecPoints + *fRecPointsCount)->X = fRecX[nb];
- (fRecPoints + *fRecPointsCount)->Y = fRecY[b];
- (fRecPoints + *fRecPointsCount)->Z = fPadData[idCentralB].fRealZ;
- (fRecPoints + *fRecPointsCount)->DetElemId = fPadData[idCentralB].fDetElemId;
- (*fRecPointsCount)++;
- if((*fRecPointsCount) == fMaxRecPointsCount){
- printf("Number of RecHit (i.e. %d) exceeds the max RecHit limit of %d.\n", (*fRecPointsCount), fMaxRecPointsCount);
- return false;
- }
- }//if lies wihtin 5.0 mm
- }// condn over fRecX ! = 0.0
- }// loop over NB side
- }// condn on fRecY[b] != 0.0
- }// loop over B side;
-
- delete []fRecX;
- delete []fRecY;
-
- delete []fAvgChargeX;
- delete []fAvgChargeY;
-
- return true;
-}
-
-