// ***************************************************************************** // This file is property of and copyright by the CBM and the ALICE HLT Project * // All rights reserved. * // * // Primary Authors: Ivan Kisel * // Igor Kulakov * // Maksym Zyzak * // GSI, Uni Frankfurt and HICforFAIR. * // * // Permission to use, copy, modify and distribute this software and its * // documentation strictly for non-commercial purposes is hereby granted * // without fee, provided that the above copyright notice appears in all * // copies and that both the copyright notice and this permission notice * // appear in the supporting documentation. The authors make no claims * // about the suitability of this software for any purpose. It is * // provided "as is" without express or implied warranty. * // * //****************************************************************************** #ifdef DO_TPCCATRACKER_EFF_PERFORMANCE #include "FitPerformance.h" #include "TMath.h" #include "TROOT.h" #include "Riostream.h" #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TProfile.h" #include "TStyle.h" #include "AliHLTTPCCAFitter.h" using arbb::dense; using arbb::pack; using arbb::scatter; using arbb::gather; using arbb::fill; using arbb::range; using arbb::value; using arbb::boolean; using arbb::f32; FitPerformance::FitPerformance() { string pullParNames[NParameters] = {"Y","Z","SinPhi","DzDs","QPt"}; string resParNames[NParameters] = {"Y","Z","SinPhi","DzDs","Pt"}; float MinXRes [NParameters] = {-0.25f,-0.7f,-0.03f,-0.02f,-0.3f}; float MaxXRes [NParameters]; for(int i=0; i mcXRange = mcX.write_only_range(); range mcYRange = mcY.write_only_range(); range mcZRange = mcZ.write_only_range(); range mcPXRange = mcPX.write_only_range(); range mcPYRange = mcPY.write_only_range(); range mcPZRange = mcPZ.write_only_range(); range mcQPRange = mcQP.write_only_range(); string tmpstring; int TrackCur = 0; for(int iTr=0; iTr> tmpstring >> TrackCur; if(TrackCur != iTr) { std::cout << "Reading MC Tracks, Error: file with data is corrupted." << std::endl; return; } InputTraksMC >> tmpstring >> mcXRange[iTr]; InputTraksMC >> tmpstring >> mcYRange[iTr]; InputTraksMC >> tmpstring >> mcZRange[iTr]; InputTraksMC >> tmpstring >> mcQPRange[iTr]; InputTraksMC >> tmpstring >> mcPXRange[iTr]; InputTraksMC >> tmpstring >> mcPYRange[iTr]; InputTraksMC >> tmpstring >> mcPZRange[iTr]; } } void FitPerformance::FitQualityCheck(AliHLTTPCCAFitter &fitter) { AliHLTTPCCATrackParamArBB InnerParam; fitter.GetTrackInnerParam(InnerParam); dense FittedMask = fill(0, mcX.length()); dense TrackID = fitter.GetTrackID(); FittedMask = scatter(fill(1,InnerParam.ArraySize), TrackID, FittedMask); mcX = pack(mcX,FittedMask); mcY = pack(mcY,FittedMask); mcZ = pack(mcZ,FittedMask); mcPX = pack(mcPX,FittedMask); mcPY = pack(mcPY,FittedMask); mcPZ = pack(mcPZ,FittedMask); mcQP = pack(mcQP,FittedMask); dense mcEx = mcPX*mcQP; dense mcEy = mcPY*mcQP; dense mcEz = mcPZ*mcQP; dense mcEt = arbb::sqrt( mcEx * mcEx + mcEy * mcEy ); dense mcSinPhi = mcEy / mcEt; dense mcDzDs = mcEz / mcEt; dense mcQPt = mcQP / mcEt; dense TransportedMask = fill(1,InnerParam.ArraySize); InnerParam.TransportToXWithMaterial( TransportedMask, mcX, fitter.cBz(), f32(0.999f) ); dense BackDirTracks = InnerParam.SignCosPhi()*mcEx < 0; mcSinPhi = select(BackDirTracks, -mcSinPhi, mcSinPhi); mcDzDs = select(BackDirTracks, -mcDzDs, mcDzDs); mcQPt = select(BackDirTracks, -mcQPt, mcQPt); dense mcPt = fill(1.f,mcQPt.length()) / arbb::abs( mcQPt ); dense qPt = InnerParam.QPt(); dense pt = fill(1.f,InnerParam.ArraySize) / arbb::abs( qPt ); dense dY = InnerParam.Y() - mcY; dense dZ = InnerParam.Z() - mcZ; dense dSinPhi = InnerParam.SinPhi() - mcSinPhi; dense dDzDs = InnerParam.DzDs() - mcDzDs; dense dQPt = qPt - mcQPt; dense dPt = pt - mcPt; dPt = dPt/mcPt; dense pY = dY/arbb::sqrt(InnerParam.Err2Y()); dense pZ = dZ/arbb::sqrt(InnerParam.Err2Z()); dense pSinPhi = dSinPhi/arbb::sqrt(InnerParam.Err2SinPhi()); dense pDzDs = dDzDs/arbb::sqrt(InnerParam.Err2DzDs()); dense pQPt = dQPt/arbb::sqrt(InnerParam.Err2QPt()); for(int i=0; i 1.e-8) fResHistos[4].Fill( value(dPt[i]) ); if ( value(InnerParam.Err2Y()[i]) > 0 ) fPullHistos[0].Fill( value( pY[i] ) ); if ( value(InnerParam.Err2Z()[i]) > 0 ) fPullHistos[1].Fill( value( pZ[i] ) ); if ( value(InnerParam.Err2SinPhi()[i]) > 0 ) fPullHistos[2].Fill( value( pSinPhi[i] ) ); if ( value(InnerParam.Err2DzDs()[i]) > 0 ) fPullHistos[3].Fill( value( pDzDs[i] ) ); if ( fabs(value(qPt[i])) > 1.e-7 && value(InnerParam.Err2QPt()[i])>0 ) fPullHistos[4].Fill( value( pQPt[i] ) ); } } FitPerformance &FitPerformance::Instance() { // reference to static object static FitPerformance gFitPerformance; return gFitPerformance; } void FitPerformance::WriteDir2Current( TObject *obj ) { //* recursive function to write down all created in the file histos if ( !obj->IsFolder() ) obj->Write(); else { TDirectory *cur = gDirectory; ((TDirectory*)obj)->cd(); TList *listSub = ( ( TDirectory* )obj )->GetList(); TIter it( listSub ); while ( TObject *obj1 = it() ) WriteDir2Current( obj1 ); cur->cd(); } } void FitPerformance::WriteHistos() { if(fOutputFile) WriteDir2Current(fOutputFile); } #endif //DO_TPCCATRACKER_EFF_PERFORMANCE