/* * RefitTrackAction.cpp * * Created on: 10/may/2010 * Author: M. Bongi, N. Mori */ #include "RefitTrackAction.h" TRandom3* RefitTrackAction::_r3 = new TRandom3(0); long int RefitTrackAction::_currEvent = -1; void RefitTrackAction::OnGood(PamLevel2 *event) { TrkParams::Set("/wizard/02/pamela_software/installed/pamela/calib/trk-param/align_param-080805-GL1from7/", 5); //DA USARE SOLO PER SIMULAZIONE ROTRASL!!! TrkTrack *trkTrack = event->GetTrack(0)->GetTrkTrack(); if (!trkTrack) return; if (_currEvent != event->GetReadEntry()) { // Saves the original track data if the current event (recorded in the static member _currEvent) is // different from the actually processed event. This way, multiple instances of the class // can run in the same analysis, the backup being done only by the first of them. _currEvent = event->GetReadEntry(); // Save the original cluster status and measured positions for (int i = 0; i < 6; i++) { _layerXBackup[i] = trkTrack->xgood[0]; _layerYBackup[i] = trkTrack->ygood[0]; _xmBackup[i] = trkTrack->xm[i]; _ymBackup[i] = trkTrack->ym[i]; } } else { // Current event matches the actually analyzed event, this meaning that another instance of the class // has already done a refit. In this case, cluster status and positions must be restored before fitting again. for (int i = 0; i < 6; i++) { trkTrack->xm[i] = _xmBackup[i]; trkTrack->ym[i] = _ymBackup[i]; _layerXBackup[i] = trkTrack->xgood[0]; _layerYBackup[i] = trkTrack->ygood[0]; } } // Apply the gaussian spread for (Int_t ip = 0; ip < 6; ip++) { // gaussian distributed random number Gauss(mean,sigma) (in cm) trkTrack->xm[ip] += _r3->Gaus(0., _spreadX); trkTrack->ym[ip] += _r3->Gaus(0., _spreadY); } // Mask the layers if (_maskedViews) { if ((_maskedViews & T1X) == T1X) trkTrack->xgood[0] = 0; if ((_maskedViews & T2X) == T2X) trkTrack->xgood[1] = 0; if ((_maskedViews & T3X) == T3X) trkTrack->xgood[2] = 0; if ((_maskedViews & T4X) == T4X) trkTrack->xgood[3] = 0; if ((_maskedViews & T5X) == T5X) trkTrack->xgood[4] = 0; if ((_maskedViews & T6X) == T6X) trkTrack->xgood[5] = 0; if ((_maskedViews & T1Y) == T1Y) trkTrack->ygood[0] = 0; if ((_maskedViews & T2Y) == T2Y) trkTrack->ygood[1] = 0; if ((_maskedViews & T3Y) == T3Y) trkTrack->ygood[2] = 0; if ((_maskedViews & T4Y) == T4Y) trkTrack->ygood[3] = 0; if ((_maskedViews & T5Y) == T5Y) trkTrack->ygood[4] = 0; if ((_maskedViews & T6Y) == T6Y) trkTrack->ygood[5] = 0; } trkTrack->FitReset(); int fail = 0; trkTrack->Fit(0, fail, 0); }