00001
00002
00003 TYPE(m3_f77_runconfig) :: runConfig
00004 TYPE(m3_f77_dataset) :: dataSet
00005 TYPE(m3_f77_interval) :: intervalNode
00006 integer(i4b) :: storeSize
00007 integer(i4b), dimension(:), allocatable :: storeSpace
00008 real(dp), dimension(:,:), allocatable :: pointing
00009
00010 M3_f77_RunConfig_Read_mpi( runConfig, "runConfig.xml", MPI_COMM_WORLD)
00011
00012 errp = M3_f77_runconfig_getpixelclassroot( runconfig, pixelclass )
00013 i = 0
00014 do while( errp == 1 )
00015 M3_pixelclass_getnumpixelinmap( pixelclass, thisnumpixel )
00016 if( numpixel == -1 ) then
00017 numpixel = thisnumpixel
00018 else if( numpixel /= thisnumpixel ) then
00019 print*, "ERROR number of pixels in maps is not uniform"
00020 stop
00021 end if
00022 errp = M3_f77_pixelclass_getnextnodeinlist( pixelclass )
00023 i = i + 1
00024 end do
00025
00026 if( i /= 18 ) then
00027 print*, "ERROR number of pixel classes must be 18"
00028 stop
00029 end if
00030
00031 allocate( mapcmb( 0 : numpixel - 1, 0 : 17 ) )
00032
00033
00034
00035
00036 errp = M3_f77_runconfig_getpixelclassroot( runconfig, pixelclass )
00037 i = 0
00038 do while( errp == 1 )
00039 M3_f77_pixelclass_getfullmap( pixelclassnode, pixel, mapcmb(:,i) )
00040 errp = M3_f77_pixelclass_getnextnodeinlist( pixelclass )
00041 end do
00042
00043 M3_f77_RunConfig_GetGCPointingGroupRoot( runConfig, gcpointinggroup )
00044
00045 numnz = -1
00046 maxIntervalLength = 0
00047
00048 errd = M3_f77_RunConfig_getdatasetroot( runConfig, dataset )
00049 do while( errd == 1 )
00050
00051 err = M3_f77_dataset_getcoveredintervalroot( dataset, interval )
00052 do while( err == 1 )
00053 M3_f77_datasetll_sampleintervaltotimeinterval( dataset, interval, timeinterval )
00054 M3_f77_interval_getinterval( interval, firstsample, lastsample )
00055 if( lastsample - firstsample + 1 > maxIntervalLength ) then
00056 maxIntervalLnegth = lastsample - firstsample + 1
00057 end if
00058
00059 M3_f77_dataset_getnumnz( dataset, thisnumnz )
00060 if( numnz == -1 ) then
00061 numnz = thisnumnz
00062 else if( thisnumnz /= numnz ) then
00063 print*, "ERROR: number of non-zeros is not uniform over the datasets."
00064 stop
00065 end if
00066 M3_f77_timeinterval_insertinterval( timeintervalList, timeinterval )
00067 err = M3_f77_Interval_getnextnodeinlist( interval )
00068 end do
00069 errd = M3_f77_datasetll_getnextnodeinlist( dataset )
00070 end do
00071
00072 M3_f77_gcpointinggroup_getstoresize( gcpointinggroup, timeIntervalList, storeSize )
00073 storeSize = int(storeSize/4) + 1
00074 allocate( storeSpace( 0 : storeSize - 1), stat=ios )
00075 M3_f77_gcpointinggroup_initializestore( gcpointinggroup, timeintervallist, storeSpace )
00076
00077 allocate( pointing( 0 : numnz - 1, 0 : maxintervallength - 1), stat = ios )
00078 allocate( tod( 0 : maxintervallength - 1), stat = ios )
00079 allocate( pixel( 0 : 17, 0 : maxintervallength - 1), stat = ios )
00080 allocate( weight( 0 : 17, 0 : maxintervallength - 1), stat = ios )
00081
00082
00083 errd = M3_f77_RunConfig_getdatasetroot( runConfig, dataset )
00084 firstrun = 1
00085 do while( errd == 1 )
00086
00087 err = M3_f77_dataset_getcoveredintervalroot( dataset, interval )
00088 do while( err == 1 )
00089 tod = 0.d0
00090 M3_dataset_getpointing( dataset, interval, pixel, weight )
00091 m3_interval_getinterval( interval, firstsample, lastsample )
00092 do i = firstsample, lastsample
00093 do j = 0, 17
00094 tod(i) = tod(i) + weight(j,i)*map(pixel(j,i), j )
00095 end do
00096 end do
00097 if ( firstrun == 1) then
00098 file = "tod.bin"
00099 call output_tl( lastsample-firstsample+1, tod, file)
00100 end if
00101 firstrun = 0
00102
00103 err = M3_f77_Interval_getnextnodeinlist( interval )
00104 end do
00105 errd = M3_f77_datasetll_getnextnodeinlist( dataset )
00106 end do