/[PAMELA software]/yoda/techmodel/PhysicsReader.cpp
ViewVC logotype

Diff of /yoda/techmodel/PhysicsReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by kusanagi, Tue Jul 6 12:20:23 2004 UTC revision 6.1 by kusanagi, Wed Aug 16 13:15:23 2006 UTC
# Line 1  Line 1 
1  /** @file      /** @file
2   * $Source: /home/cvspamela/yoda/techmodel/PhysicsReader.cpp,v $   * $Source: /home/cvsmanager/yoda/techmodel/PhysicsReader.cpp,v $
3   * $Id: PhysicsReader.cpp,v 1.1 2004/06/09 23:18:20 nagni Exp $   * $Id: PhysicsReader.cpp,v 6.0 2006/02/07 17:11:10 kusanagi Exp $
4   * $Author: nagni $   * $Author: kusanagi $
5   *   *
6   * Implementation of the LogReader class.   * Implementation of the LogReader class.
7  * ToBeDone:  * ToBeDone:
# Line 11  Line 11 
11  #define UINT unsigned int  #define UINT unsigned int
12  #define BYTE  unsigned char  #define BYTE  unsigned char
13  #include <string>  #include <string>
14  #include <log4cpp/Category.hh>  #include <log4cxx/logger.h>
15  extern "C" {  extern "C" {
16  #include <sys/time.h>  #include <sys/time.h>
17  #include "CRC.h"  #include "CRC.h"
# Line 19  extern "C" { Line 19  extern "C" {
19    
20  #include <fstream>  #include <fstream>
21  #include "stdio.h"  #include "stdio.h"
22    #include <sys/wait.h>
23  #include "ReaderAlgorithms.h"  #include "ReaderAlgorithms.h"
24    
 //#include "event/CalibTrgEvent.h"  
25    
26  using namespace pamela;  using namespace pamela;
27  using namespace pamela::techmodel;  using namespace pamela::techmodel;
28  using namespace pamela::tracker;  using namespace pamela::tracker;
29    using namespace pamela::anticounter;
30    using namespace pamela::calorimeter;
31    using namespace pamela::neutron;
32    using namespace pamela::S4;
33    using namespace pamela::tof;
34    using namespace pamela::trigger;
35    
36  static log4cpp::Category& cat = log4cpp::Category::getInstance("pamela.techmodel.PhysicsReader");    static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.PhysicsReader"));
37    
38  /**  /**
39   * Constructor.   * Constructor.
40   */   */
41  PhysicsReader::PhysicsReader(void):  PhysicsReader::PhysicsReader(void):
42    TechmodelAlgorithm(PacketType::Log, "TechmodelPhysicsReader") {      TechmodelAlgorithm(PacketType::Physics, "TechmodelPhysicsReader") {
43    cat <<  log4cpp::Priority::DEBUG      logger->debug(_T("Constructor"));
44        <<  "Constructor "      trackerReader     = new TrackerReader;
45        <<  "\n " << log4cpp::CategoryStream::ENDLINE;      anticounterReader = new AnticounterReader;
46    trackerReader = new TrackerReader();      calorimeterReader = new CalorimeterReader;
47        neutronReader     = new NeutronDetectorReader;
48        s4Reader          = new S4Reader;
49        tofReader         = new TofReader;
50        triggerReader     = new TriggerReader;
51  }  }
52    
53  /**  /**
# Line 45  PhysicsReader::PhysicsReader(void): Line 55  PhysicsReader::PhysicsReader(void):
55   */   */
56  std::string PhysicsReader::GetVersionInfo(void) const {  std::string PhysicsReader::GetVersionInfo(void) const {
57    return    return
58      "$Header: /home/cvspamela/yoda/techmodel/PhysicsReader.cpp,v 1.1 2004/06/09 23:18:20 nagni Exp $\n";      "$Header: /home/cvsmanager/yoda/techmodel/PhysicsReader.cpp,v 6.0 2006/02/07 17:11:10 kusanagi Exp $\n";
59  }  }
60    
61  /**  /**
# Line 53  std::string PhysicsReader::GetVersionInf Line 63  std::string PhysicsReader::GetVersionInf
63   * event reader routines for all packet types.   * event reader routines for all packet types.
64   */   */
65  void PhysicsReader::Init(PamelaRun *run) {  void PhysicsReader::Init(PamelaRun *run) {
66    SetInputStream(run);      SetInputStream(run);
67    trackerReader->Init(run);      trackerReader->Init(run);
68        anticounterReader->Init(run);
69        calorimeterReader->Init(run);
70        neutronReader->Init(run);
71        s4Reader->Init(run);
72        tofReader->Init(run);
73        triggerReader->Init(run);
74    //run->WriteSubPacket(this, &physicsEvent, physicsEvent->Class());    //run->WriteSubPacket(this, &physicsEvent, physicsEvent->Class());
75      logger->debug(_T("Initialize"));
76  }  }
77    
78  /**  /**
79   * Unpack the Physics event from an input file.   * Unpack the Physics event from an input file.
80   */   */
81  void PhysicsReader::RunEvent(int EventNumber, long int length) {  void PhysicsReader::RunEvent(int EventNumber, long int dataLenght) throw (Exception){
82        char *subData = new char[dataLenght];
83        InputFile->read(subData, sizeof(unsigned char)*dataLenght);
84    
     /*UINT16      CRCread;     //CRC read from the end of the subpacket  
     UINT16      CRCsum;      //CRC of the data  
     char        packetData[length-2];  
     char        CRCevent[2];  
     long int    dataLength;  
   
     InputFile->read(packetData, sizeof(packetData));  
     InputFile->read(CRCevent, sizeof(CRCevent));  
   
     CRCsum = CM_Compute_CRC16(0, (BYTE*)packetData, length -(long int)2 );  
     CRCread = ((UINT16)(CRCevent[0]<<8)) + ((UINT16)CRCevent[1]);  
     InputFile->seekg(-(length), std::ios::cur);  
   
     if (CRCread == CRCsum){  
           
         //passo packetData a tutti i reader dei vari rivelatori  
     } else {  
         cat <<  log4cpp::Priority::ERROR  
             <<  "The test of calculated CRC with one wrote on file FAILED!!"  
             <<  "\n " << log4cpp::CategoryStream::ENDLINE;  
     }*/  
   
     char        packetData[length-2];  
     int         ERROR;  
   
     InputFile->read(packetData, sizeof(packetData));  
     //Skip the last two crc bytes already checked in UnpackPscu  
     //This part have to be refactored!!!! too bad......  
     //InputFile->seekg((long int)2, std::ios::cur);  
       
85      /*-----------------*/      /*-----------------*/
86        /*
87      //passo packetData a tutti i reader dei vari rivelatori      //passo packetData a tutti i reader dei vari rivelatori
88      //trackerReader->RunEvent(EventNumber, packetData, length-2);      int childtrk, childac, childcalo, childnd, childs4, childtof, childtrig, Status;
89      /*-----------------*/      int retctrk, retcac, retccalo, retcnd, retcs4, retctof, retctrig;
90      //free(packetData);          
91        if ((childtrk = fork()) > 0) {
92            trackerReader->RunEvent(EventNumber, subData, dataLenght);
93        }
94        if ((childac = fork()) > 0) {
95            anticounterReader->RunEvent(EventNumber, subData, dataLenght);
96        }
97        if ((childcalo = fork()) > 0) {
98            calorimeterReader->RunEvent(EventNumber, subData, dataLenght);
99        }
100        if ((childnd = fork()) > 0) {
101            neutronReader->RunEvent(EventNumber, subData, dataLenght);
102        }
103        if ((childs4 = fork()) > 0) {
104            s4Reader->RunEvent(EventNumber, subData, dataLenght);
105        }
106        if ((childtof = fork()) > 0) {
107            tofReader->RunEvent(EventNumber, subData, dataLenght);
108        }
109        if ((childtrig = fork()) > 0) {
110            triggerReader->RunEvent(EventNumber, subData, dataLenght);
111        }
112            
113        do {
114            retctrk  = waitpid(childtrk, &Status, 0);
115            retcac   = waitpid(childac, &Status, 0);
116            retccalo = waitpid(childcalo, &Status, 0);
117            retcnd   = waitpid(childnd, &Status, 0);
118            retcs4   = waitpid(childs4, &Status, 0);
119            retctof  = waitpid(childtof, &Status, 0);
120            retctrig = waitpid(childtrig, &Status, 0);
121        } while(    (retctrk > 0  || (retctrk == -1))   &&
122                    (retcac > 0   || (retcac == -1))    &&
123                    (retccalo > 0 || (retccalo == -1))  &&
124                    (retcnd > 0   || (retcnd == -1))    &&
125                    (retcs4 > 0   || (retcs4 == -1))    &&
126                    (retctof > 0  || (retctof == -1))   &&
127                    (retctrig > 0 || (retctrig == -1)) );
128    */  
129      
130        trackerReader->RunEvent(EventNumber, subData, dataLenght);
131        anticounterReader->RunEvent(EventNumber, subData, dataLenght);
132        calorimeterReader->RunEvent(EventNumber, subData, dataLenght);
133        neutronReader->RunEvent(EventNumber, subData, dataLenght);
134        s4Reader->RunEvent(EventNumber, subData, dataLenght);
135        tofReader->RunEvent(EventNumber, subData, dataLenght);
136        triggerReader->RunEvent(EventNumber, subData, dataLenght);
137        
138        /*-----------------*/
139        delete [] subData;
140  }  }
141    

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.6.1

  ViewVC Help
Powered by ViewVC 1.1.23