void KVINDRAReconEvent::ChangeFragmentMasses(UChar_t mass_formula) { //Changes the mass formula used to calculate A from Z for all nuclei in event //For the values of mass_formula, see KVNucleus::GetAFromZ // //The fragment energy is modified in proportion to its mass, this is due to the //contribution from the CsI light-energy calibration: // // E -> E + E_CsI*( newA/oldA - 1 ) // //From an original lunch by Remi Bougault. // //Only particles with 'acceptable' ID & E codes stopping in (or passing through) //a CsI detector are affected; particles whose mass was measured //(i.e. having KVReconstructedNucleus::IsAMeasured()==kTRUE) //are not affected by the change of mass formula. ResetGetNextParticle(); KVINDRAReconNuc* frag; while( (frag = (KVINDRAReconNuc*)GetNextParticle("ok")) ){ if( !frag->IsAMeasured() ){ Float_t oldA = (Float_t)frag->GetA(); frag->SetMassFormula(mass_formula); if( frag->GetCsI() ){ Float_t oldECsI = frag->GetEnergyCsI(); Float_t oldE = frag->GetEnergy(); Float_t newECsI = oldECsI*((Float_t)frag->GetA()/oldA); frag->GetCsI()->SetEnergy(newECsI); frag->SetEnergy(oldE - oldECsI + newECsI); } } } }
void KVINDRAReconEvent::IdentifyEvent() { // Performs event identification (see KVReconstructedEvent::IdentifyEvent), and then // particles stopping in first member of a telescope (GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) are // labelled with VEDA ID code kIDCode5 (Zmin) // // When CsI identification gives a gamma, we unset the 'analysed' state of all detectors // in front of the CsI and reanalyse the group in order to reconstruct and identify charged particles // stopping in them. // // Unidentified particles receive the general ID code for non-identified particles (kIDCode14) KVReconstructedEvent::IdentifyEvent(); KVINDRAReconNuc* d = 0; int mult = GetMult(); KVUniqueNameList gammaGroups;//list of groups with gammas identified in CsI ResetGetNextParticle(); while ((d = GetNextParticle())) { if (d->IsIdentified() && d->GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) { d->SetIDCode(kIDCode5); // Zmin } else if (d->IsIdentified() && d->GetCodes().TestIDCode(kIDCode0)) { // gamma identified in CsI // reset analysed state of all detectors in front of CsI if (d->GetCsI()) { if (d->GetCsI()->GetAlignedDetectors()) { TIter next(d->GetCsI()->GetAlignedDetectors()); KVDetector* det = (KVDetector*)next(); //first detector = CsI while ((det = (KVDetector*)next())) det->SetAnalysed(kFALSE); gammaGroups.Add(d->GetGroup()); } else { Error("IdentifyEvent", "particule id gamma, no aligned detectors???"); d->Print(); } } else { Error("IdentifyEvent", "particule identified as gamma, has no CsI!!"); d->Print(); } } } // perform secondary reconstruction in groups with detected gammas int ngamG = gammaGroups.GetEntries(); if (ngamG) { for (int i = 0; i < ngamG; i++) { gIndra->AnalyseGroupAndReconstructEvent(this, (KVGroup*)gammaGroups.At(i)); } } if (GetMult() > mult) { /*Info("IdentifyEvent", "Event#%d: Secondary reconstruction (gammas) -> %d new particles", GetNumber(), GetMult()-mult);*/ // identify new particles generated in secondary reconstruction KVReconstructedEvent::IdentifyEvent(); ResetGetNextParticle(); while ((d = GetNextParticle())) { if (d->IsIdentified() && d->GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) { d->SetIDCode(kIDCode5); // Zmin } else if (!d->IsIdentified()) { d->SetIDCode(kIDCode14); } } /* for(int i=mult+1; i<=GetMult(); i++){ d = GetParticle(i); if(d->IsIdentified()) printf("\t%2d: Ring %2d Module %2d Z=%2d A=%3d code=%d\n",i,d->GetRingNumber(), d->GetModuleNumber(),d->GetZ(),d->GetA(),d->GetCodes().GetVedaIDCode()); else printf("\t%2d: Ring %2d Module %2d UNIDENTIFIED status=%d\n", i,d->GetRingNumber(), d->GetModuleNumber(), d->GetStatus()); } */ } }