X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSRecPoint.cxx;h=e84d789d4ffa5365bdc142e45bfef6d92027597e;hb=cc2710b2840d45e8505d6289eefe9daa48bae4ca;hp=be3435e01f03381b12b09d2a09e6a612df1f4777;hpb=7a9d98f981f6adbfcf91070d6d29f49b22a28476;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSRecPoint.cxx b/PHOS/AliPHOSRecPoint.cxx index be3435e01f0..e84d789d4ff 100644 --- a/PHOS/AliPHOSRecPoint.cxx +++ b/PHOS/AliPHOSRecPoint.cxx @@ -18,37 +18,102 @@ // Why should I put meaningless comments // just to satisfy // the code checker -//*-- Author: Gines Martinez (SUBATECH) +//-- Author: Gines Martinez (SUBATECH) // --- ROOT system --- #include "TPad.h" +#include "TGraph.h" +#include "TPaveText.h" #include "TClonesArray.h" +#include "TGeoMatrix.h" // --- Standard library --- -#include -#include // --- AliRoot header files --- - +#include "AliLog.h" +#include "AliPHOSLoader.h" #include "AliPHOSGeometry.h" #include "AliPHOSDigit.h" #include "AliPHOSRecPoint.h" -#include "AliPHOSGetter.h" +#include "AliGeomManager.h" ClassImp(AliPHOSRecPoint) //____________________________________________________________________________ AliPHOSRecPoint::AliPHOSRecPoint() - : AliRecPoint() + : AliCluster(),fPHOSMod(0), + fMulTrack(0),fMaxDigit(100),fMulDigit(0),fMaxTrack(200), + fDigitsList(0),fTracksList(0),fAmp(0), + fIndexInList(-1), // to be set when the point is already stored + fLocPos(0,0,0) { // ctor - fMaxTrack = 200 ; - fPHOSMod = 0; +} + +//____________________________________________________________________________ +AliPHOSRecPoint::AliPHOSRecPoint(const char * ) + : AliCluster(),fPHOSMod(0), + fMulTrack(0),fMaxDigit(100),fMulDigit(0),fMaxTrack(200), + fDigitsList(new Int_t[fMaxDigit]),fTracksList(new Int_t[fMaxTrack]),fAmp(0), + fIndexInList(-1), // to be set when the point is already stored + fLocPos(0,0,0) +{ + // ctor + +} +//_______________________________________________________________________ +AliPHOSRecPoint::~AliPHOSRecPoint() +{ + // dtor + + delete [] fDigitsList ; + delete [] fTracksList ; + } +//____________________________________________________________________________ +AliPHOSRecPoint::AliPHOSRecPoint(const AliPHOSRecPoint &rp) : + AliCluster(rp), + fPHOSMod(rp.fPHOSMod),fMulTrack(rp.fMulTrack),fMaxDigit(rp.fMaxDigit), + fMulDigit(rp.fMulDigit),fMaxTrack(rp.fMaxTrack),fDigitsList(0x0), + fTracksList(0x0),fAmp(rp.fAmp),fIndexInList(rp.fIndexInList), + fLocPos(rp.fLocPos) +{ + //copy ctor + + if (rp.fMulDigit>0) fDigitsList = new Int_t[rp.fMulDigit]; + for(Int_t i=0; i0) fTracksList = new Int_t[rp.fMulTrack]; + for(Int_t i=0; i(gime->PHOSGeometry()); + + AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ; Int_t iDigit; Int_t relid[4] ; @@ -109,8 +174,7 @@ void AliPHOSRecPoint::ExecuteEvent(Int_t event, Int_t px, Int_t py) Float_t * zi = new Float_t [kMulDigit] ; for(iDigit = 0; iDigit < kMulDigit; iDigit++) { - cout << " AliPHOSRecPoint::ExecuteEvent -> Something wromg with the code" << endl ; - abort() ; + Fatal("AliPHOSRecPoint::ExecuteEvent", "-> Something wrong with the code"); digit = 0 ; //dynamic_cast((fDigitsList)[iDigit]); phosgeom->AbsToRelNumbering(digit->GetId(), relid) ; phosgeom->RelPosInModule(relid, xi[iDigit], zi[iDigit]) ; @@ -137,7 +201,7 @@ void AliPHOSRecPoint::ExecuteEvent(Int_t event, Int_t px, Int_t py) clustertext ->Draw(""); } gPad->Update() ; - Print() ; + Print("dummy") ; delete[] xi ; delete[] zi ; } @@ -159,11 +223,12 @@ break; } } //____________________________________________________________________________ -void AliPHOSRecPoint::EvalAll(Float_t logWeight,TClonesArray * digits) { +void AliPHOSRecPoint::EvalAll(TClonesArray * /* digits */) +{ //evaluates (if necessary) all RecPoint data members - EvalPrimaries(digits) ; } + //____________________________________________________________________________ void AliPHOSRecPoint::EvalPHOSMod(AliPHOSDigit * digit) { @@ -171,76 +236,25 @@ void AliPHOSRecPoint::EvalPHOSMod(AliPHOSDigit * digit) if( fPHOSMod == 0){ Int_t relid[4] ; - - AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ; - AliPHOSGeometry * phosgeom = const_cast(gime->PHOSGeometry()); + + AliPHOSGeometry * phosgeom = (AliPHOSGeometry::GetInstance()); phosgeom->AbsToRelNumbering(digit->GetId(), relid) ; fPHOSMod = relid[0]; } } -//______________________________________________________________________________ -void AliPHOSRecPoint::EvalPrimaries(TClonesArray * digits) -{ - // Constructs the list of primary particles (tracks) which have contributed to this RecPoint - - AliPHOSDigit * digit ; - Int_t * tempo = new Int_t[fMaxTrack] ; - - Int_t index ; - for ( index = 0 ; index < GetDigitsMultiplicity() ; index++ ) { // all digits - digit = dynamic_cast(digits->At( fDigitsList[index] )) ; - Int_t nprimaries = digit->GetNprimary() ; - Int_t * newprimaryarray = new Int_t[nprimaries] ; - Int_t ii ; - for ( ii = 0 ; ii < nprimaries ; ii++) - newprimaryarray[ii] = digit->GetPrimary(ii+1) ; - - Int_t jndex ; - for ( jndex = 0 ; jndex < nprimaries ; jndex++ ) { // all primaries in digit - if ( fMulTrack > fMaxTrack ) { - fMulTrack = - 1 ; - cout << "AliPHOSRecPoint::GetNprimaries ERROR > increase fMaxTrack " << endl ; - break ; - } - Int_t newprimary = newprimaryarray[jndex] ; - Int_t kndex ; - Bool_t already = kFALSE ; - for ( kndex = 0 ; kndex < fMulTrack ; kndex++ ) { //check if not already stored - if ( newprimary == tempo[kndex] ){ - already = kTRUE ; - break ; - } - } // end of check - if ( !already) { // store it - tempo[fMulTrack] = newprimary ; - fMulTrack++ ; - } // store it - } // all primaries in digit - delete newprimaryarray ; - } // all digits - - - fTracksList = new Int_t[fMulTrack] ; - for(index = 0; index < fMulTrack; index++) - fTracksList[index] = tempo[index] ; - - delete tempo ; - -} //____________________________________________________________________________ -void AliPHOSRecPoint::GetGlobalPosition(TVector3 & gpos, TMatrix & gmat) const +void AliPHOSRecPoint::GetGlobalPosition(TVector3 & gpos, TMatrixF & gmat) const { // returns the position of the cluster in the global reference system of ALICE // and the uncertainty on this position + + AliPHOSGeometry * phosgeom = (AliPHOSGeometry::GetInstance()); + phosgeom->GetGlobalPHOS(this, gpos, gmat); - - AliPHOSGetter::GetInstance()->PHOSGeometry()->GetGlobal(this, gpos, gmat) ; - } - //______________________________________________________________________________ void AliPHOSRecPoint::Paint(Option_t *) { @@ -262,3 +276,78 @@ void AliPHOSRecPoint::Paint(Option_t *) gPad->SetAttMarkerPS(markercolor,markerstyle,markersize) ; gPad->PaintPolyMarker(1,&x,&y,"") ; } +//______________________________________________________________________________ +void AliPHOSRecPoint::GetLocalPosition(TVector3 & pos) const +{ + // returns the position of the cluster in the local reference system + // of the sub-detector + + pos = fLocPos; +} + +//____________________________________________________________________________ +void AliPHOSRecPoint::EvalLocal2TrackingCSTransform() +{ + //Evaluates local to "tracking" c.s. transformation (B.P.). + //All evaluations should be completed before calling for this function. + //See ALICE PPR Chapter 5 p.18 for "tracking" c.s. definition, + //or just ask Jouri Belikov. :) + + if(IsEmc()) { + SetVolumeId(AliGeomManager::LayerToVolUID(AliGeomManager::kPHOS1,GetPHOSMod()-1)); + } + else + SetVolumeId(AliGeomManager::LayerToVolUID(AliGeomManager::kPHOS2,GetPHOSMod()-1)); + + Double_t lxyz[3] = {fLocPos.X(),fLocPos.Y(),fLocPos.Z()}; + Double_t txyz[3] = {0,0,0}; + Double_t dy; + Double_t crystalShift; + + AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance(); + AliPHOSEMCAGeometry* geoEMCA = phosgeom->GetEMCAGeometry(); + + //Calculate offset to crystal surface. + //See fCrystalShift code in AliPHOSGeometry::Init()). + + const Float_t * inthermo = geoEMCA->GetInnerThermoHalfSize() ; + const Float_t * strip = geoEMCA->GetStripHalfSize() ; + const Float_t * splate = geoEMCA->GetSupportPlateHalfSize(); + const Float_t * crystal = geoEMCA->GetCrystalHalfSize() ; + const Float_t * pin = geoEMCA->GetAPDHalfSize() ; + const Float_t * preamp = geoEMCA->GetPreampHalfSize() ; + crystalShift = -inthermo[1]+strip[1]+splate[1]+crystal[1]-geoEMCA->GetAirGapLed()/2.+pin[1]+preamp[1] ; + + if(IsEmc()) { + dy = crystalShift; + lxyz[2] = -lxyz[2]; //Opposite z directions in EMC matrix and local frame!!! + } + else + dy = phosgeom->GetCPVBoxSize(1)/2.; //center of CPV module + + lxyz[1] = lxyz[1] - dy; + + const TGeoHMatrix* tr2loc = GetTracking2LocalMatrix(); + if(!tr2loc) AliFatal(Form("No Tracking2LocalMatrix found for VolumeID=%d",GetVolumeId())); + + tr2loc->MasterToLocal(lxyz,txyz); + SetX(txyz[0]); SetY(txyz[1]); SetZ(txyz[2]); + + if(AliLog::GetGlobalDebugLevel()>0) { + TVector3 gpos; TMatrixF gmat; + GetGlobalPosition(gpos,gmat); + Float_t gxyz[3]; + GetGlobalXYZ(gxyz); + TString emc; + if(IsEmc()) + emc="EMC"; + else + emc="CPV"; + AliInfo(Form("lCS-->(%.3f,%.3f,%.3f), tCS-->(%.3f,%.3f,%.3f), gCS-->(%.3f,%.3f,%.3f), gCScalc-->(%.3f,%.3f,%.3f), module %d %s", + fLocPos.X(),fLocPos.Y(),fLocPos.Z(), + GetX(),GetY(),GetZ(), + gpos.X(),gpos.Y(),gpos.Z(), + gxyz[0],gxyz[1],gxyz[2],GetPHOSMod(),emc.Data())); + } + +}