#include #include #include #include #include #include #include #include "CalorObjects/CesClusterColl.hh" #include "CalorObjects/CprClusterColl.hh" #include "CalorObjects/PesClusterColl.hh" //___________________________________________________________________________ Int_t StntupleInitClusterBlock(TStnDataBlock* block, AbsEvent* event, int modef) { // initialize Ces/Cpr/Pes data block starting from event TStnClusterBlock* data = (TStnClusterBlock*) block; data->Clear(); // first Ces clusters ************** EventRecord::ConstIterator iCesClusterColl( event, "CesClusterColl"); for ( ; iCesClusterColl.is_valid(); ++iCesClusterColl) { CesClusterColl_ch cesClusterColl_ch( iCesClusterColl ); bool trk=false, unb=false; if(cesClusterColl_ch->description() == "Track_based_seed") { trk = true; } if(cesClusterColl_ch->description() == "Strip_based_seed") { unb = true; } if(trk || unb) { CesClusterColl::const_iterator ci; for (ci = cesClusterColl_ch->contents().begin(); ci != cesClusterColl_ch->contents().end(); ++ci) { TCesCluster* ces; if(trk) ces = data->NewCesTrkCluster(); if(unb) ces = data->NewCesUnbCluster(); ces->fCode = (ci->number_elements()<<15) | (ci->first_element()<<7) | (ci->module()<<2) | (ci->side()<<1) | ci->view(); ces->fEnergy = ci->energy(); ces->fCoord = ci->localCoord(); ces->fSigma = ci->clusterWidth(); ces->fChiSq = ci->chi2(); // keep the pointer itself for finding links ces->fCesp = &(*ci); } // end loop over clusters } // end if on collection description } // end loop over CES collections // now Cpr clusters **************** EventRecord::ConstIterator iCprClusterColl( event, "CprClusterColl"); for ( ; iCprClusterColl.is_valid(); ++iCprClusterColl) { CprClusterColl_ch cprClusterColl_ch( iCprClusterColl ); bool trk=false, unb=false; if(cprClusterColl_ch->description() == "TrackBased_CprClusterCollection") { trk = true; } if(cprClusterColl_ch->description() == "SeedBased_CprClusterCollection") { unb = true; } if(trk || unb) { CprClusterColl::const_iterator ri; for (ri = cprClusterColl_ch->contents().begin(); ri != cprClusterColl_ch->contents().end(); ++ri) { TCprCluster* cpr; if(trk) cpr = data->NewCprTrkCluster(); if(unb) cpr = data->NewCprUnbCluster(); vector wir = ri->wires(); int nWire = wir.size(); int firstWire = 0; if(wir.size()>0) { firstWire = wir[0].getWireNo(); } cpr->fCode = ri->side() | (ri->module()<<1) | (nWire<<6) | (firstWire<<12); cpr->fCharge = ri->energy(); cpr->fX = ri->localCoord(); cpr->fSigmaX = ri->clusterWidth(); // keep the pointer itself for finding links cpr->fCprp = &(*ri); } // end loop over clusters } // end if on collection description } // end loop over CPR collections // PES clusters *********************** EventRecord::ConstIterator iPesClusterColl( event, "PesClusterColl"); for ( ; iPesClusterColl.is_valid(); ++iPesClusterColl) { PesClusterColl_ch pesClusterColl_ch( iPesClusterColl ); PesClusterColl::const_iterator pi; for (pi = pesClusterColl_ch->contents().begin(); pi != pesClusterColl_ch->contents().end(); ++pi) { TPesCluster* pes; pes = data->NewPesCluster(); int firstHit = pi->lastStrip() - pi->numStrips() + 1; pes->fCode = (pi->numStrips()<<13) | (firstHit<<5) | (pi->octant()<<2) | (pi->side()<<1) | pi->view(); pes->fEnergy = pi->energy(); pes->fCoord = pi->centroidCM(); pes->fSigma = pi->clusterWidth(); pes->fYSlope = pi->lineSlope(); pes->fYInter = pi->lineIntercept(); pes->fChiSq = 0; // keep the pointer itself for finding links pes->fPesp = &(*pi); } // end loop over clusters } // end loop over PES collections return 0; }