/****************************************************************\ | This file is part of the PAX example files for CDF | | -------------------------------------------------------------- | | Author of the last change: $Author: erdmann $ | Date of last change: $Date: 2003/11/18 15:13:17 $ | Revision number: $Revision: 1.2 $ \****************************************************************/ // //! example interface: fill CDF StnElectrons into PAX event interpretation // #include "TPAXAnaModule.hh" #include "PAX/PAXexperimentclass.hh" #include "PAX/PAXfourvector.hh" #include "PAX/PAXinterpret.hh" #include "PAX/PAXiterator.hh" #include "PAX/PAXphysicsmap.hh" #include "PAX/PAXvertex.hh" #include #include bool TPAXAnaModule::FillElectrons(PaxEventInterpret* ei, int currentevent){ bool vertexOK = 0; bool electronOK = 0; bool eventOK = 1; // fill the vertices from the VertexBlock into the event interpretation vertexOK = FillVertices(ei, currentevent); // fill the electrons from the StnElectronBlock into the event interpretation if (fElectronData) { // set name of event interpretation ei->SetPaxName("electrons"); // read Stntuple data fElectronData->GetEntry(currentevent); // loop over all CDF electrons int nelectrons = fElectronData->NElectrons(); for (Int_t i=0; iElectron(i); // create empty pax fourvector PaxFourVector* pax_electron = new PaxFourVector; // add fourvector to the event interpretation ei->Add(pax_electron); // set kinematics, charge, name, particle identification pax_electron->SetPx((double) cdf_electron->Momentum()->Px()); pax_electron->SetPy((double) cdf_electron->Momentum()->Py()); pax_electron->SetPz((double) cdf_electron->Momentum()->Pz()); pax_electron->SetE ((double) cdf_electron->Momentum()->E()); pax_electron->SetCharge((double) cdf_electron->Charge()); pax_electron->SetPaxName("electron"); int ipdg = 11; if ( pax_electron->GetCharge() > 0 ) ipdg = -ipdg; pax_electron->SetParticleId( ipdg ); // ---------------------------------------------------------------- // in order to enable access to the original CDF data within PAX, // register an experiment relation to the instance of the TStnElectron // class string experiment_class_manager; // create empty experiment relation PaxExperimentClassRelations* experiment_class_relation = new PaxExperimentClassRelations; // add a manager with pax vertex under the name of the CDF class // to the pax electron experiment_class_manager = "TStnElectron"; pax_electron->map_experimentclass_relations ->Add( experiment_class_manager, experiment_class_relation ); // register CDF electron instance with the experiment class relation PaxExperimentClass* ec = new PaxExperiment(cdf_electron); experiment_class_relation->Add(i,ec); // also register an experiment relation to the eta-phi assignment // of the calorimeter tower TCalTower if (fCalData) { TCalTower* tower = fCalData->Tower(cdf_electron->SeedIEta(), cdf_electron->SeedIPhi()); // create empty experiment relation PaxExperimentClassRelations* tower_relation = new PaxExperimentClassRelations; // add a manager with pax electron under the name of the CDF class experiment_class_manager = "TCalTower"; pax_electron->map_experimentclass_relations ->Add( experiment_class_manager, tower_relation ); // register CDF tower instance with the experiment class relation PaxExperimentClass* ec = new PaxExperiment( tower ); tower_relation->Add( tower->EtaPhi(), ec ); } } electronOK = 1; } else { cerr << "ElectronBlock was not found in the STNTUPLE!!" << endl; electronOK = 0; } //------------------------------------------------------------ // connect all calorimeter towers to the primary vertex if (vertexOK & electronOK) { // iterator for vertices PaxIterator* iter_vx = ei->vertex->GetIterator(); // search for the primary vertex PaxVertex* primary_vertex = 0; iter_vx->First(); while ( !primary_vertex && !iter_vx->IsDone() ) { if (iter_vx->CurrentItem()->GetPaxName() == "primary vertex") primary_vertex = iter_vx->CurrentItem(); iter_vx->Next(); } // connect all towers to the primary vertex: // here we set the begin vertex relations of all fourvectors, // as well as the outgoing fourvector relations of the vertex if ( primary_vertex ) { PaxIterator < PaxFourVector* >* iter_fv = ei->fourvector->GetIterator(); for ( iter_fv->First(); !iter_fv->IsDone(); iter_fv->Next() ) iter_fv->CurrentItem()->begin_vertex_relations-> Add( primary_vertex, iter_fv->CurrentItem() ); } } eventOK = vertexOK && electronOK; return eventOK; } //_____________________________________________________________________________